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