關于 Node.js: 所有PHP開發人員應該知道的5點
我最近開始和Node.js打交道。以前做PHP開發,特別是Drupal,我發現向Node.js轉移很容易,而且過程很愉快!但是我也需要學會從一些不同的角度思考。下面我列出了5項我認為PHP工程師應該知道的Node.js特點。
1. Node.js 是構建于Chrome的JavaScript引擎的
Google的瀏覽器Chrome,有一個非常快速的JavaScript引擎,叫做V8。這個JS引擎可以被獨立出來。Node.js就是建立在V8之上的。這也是為什么Node.js會運行的如此之快。對于開發者來說,有幾個好處:
- 你不需要重新學習一門新的語言,它就是JS。我常常查看Chrome和Mozilla的JS文檔,他們完全通用。
- 受益于V8的 JIT (Just In Time)編譯功能,Node.js 的應用的運行速度可以和本地代碼媲美。對比測試標明,Node.js 要比 PHP 和Ruby 快很多。
- 隨著V8的進步,Node.js 將同時受益。
2. Node.js 不僅僅是一個網頁服務器或者平臺
和PHP不同,Node.js 不是以網頁為中心的。Node.js 是通用目的的JS運行時,帶有很多功能強大的庫。其中有一個庫提供了 HTTP/HTTPS 的實現。
你可以用Node.js做很多事情。你可以很容易的利用它來創建一個命令行程序或者其他TCP/IP服務。
3. Node.js 是面向對象的 (雖然比較奇怪)
我 喜歡jQuery。但是它讓我變懶,寫了很多簡單、快速但是很難看毫無架構可言的腳本。這并不是什么壞事,因為處理簡單的網頁行為,這足夠了。但是 Node.js不是僅僅用來處理瀏覽器上面的事情的,它是可以用來構建應用程序的,也就是你必須考慮程序架構。當你用Node.js寫代碼的時候,你將深 入到JS的對象模型中。我曾經很討厭JS的對象模型,常常把我搞瘋掉。但是Node.js和NPM(Node Package Manager)很好的利用了JS的原型系統,幫助我清楚了很多類/接口使用中的障礙,讓我愛上了面向對象的JS編程。
4. 基于事件的 I/O
這是Node.js最有爭議的一點。Node自身在一個線程中運行。是的,只有一個!你可以和傳統的 Apache/PHP 的一堆實例對比一下。但是Node運行的很快速,很高效。
這 是怎么做到的?共享執行時間,把密集的IP處理放到別的線程處理。對于這一點的優點與缺點我可以寫很長的文字來討論,但這里我想說點實際的:當你用 Node.js寫代碼的時候,你需要考慮你的任務是否是慢的,或者I/O密集型的。使用異步的方法來處理回調或者使用事件處理器來處理執行慢的工作。
最主要的是,你要保證代碼不讓一個請求占據Node主線程太長事件,并且不給其他請求處理的機會。
5. 必須使用包管理!
老實說,你喜歡PEAR嗎?你是不是把你大部分的代碼都轉換成PEAR或者PECL包了?并沒有很多PHP程序員這么做,甚至很多人并不知道PEAR的存在。在Node.js的世界里,你必須把代碼打包:
- Node.js的設計就是一個最精簡的框架。PHP核心的90%的東西都不會在Node.js核心中出現。例如,數據庫驅動、郵件發送庫、HTML支持等等,都不在核心庫中。
- Node.js的核心就是一個模塊化的框架。你會發現它很好用!
- NPM(Node Package Manager)是你必備的工具。有了它,你就可以下載Node.js的各種代碼包,驅動,解析器,編輯器,服務器等等。
- 創建并且發布你的代碼包是很簡單的。我在使用Node工作不久就發布了我的第一個代碼包。
如果你是一個Drupal開發者,你會覺得Node的包管理系統有點像Drupal的模塊,不同的是你現在面對的開發者,不是建站者。
結論:問問你的醫生,Node.js是否合適你
我 提到了很多PHP開發者應該知道的,Node.js的特點。互聯網上有成千上萬關于Node.js的文章,大部分是正面的。Node是一個有趣的產品,它 有一個優雅的架構。但是Node并不是萬能藥。我并不認為Node能夠馬上替代PHP。我只是認為PHP開發者都應該學習一下Node.js。它很簡單, 很有用。
英文原文