我最近開始和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。 它很簡單,很有用。