《PHP編程:簡單談談PHP vs Node.js》要點:
本文介紹了PHP編程:簡單談談PHP vs Node.js,希望對您有用。如果有疑問,可以聯系我們。
相關主題:node.js web開發
網絡正在處于一個日新月異的發展時代.服務器端開發人員在選擇語言的時候非常困惑,有長期占主導地位的語言,例如C、Java和Perl,也有專注于web開發的語言,例如Ruby、Clojure和Go.只要你的項目運行良好,你的選擇就顯得沒有那么重要了.
但是如何讓這些新的web開發人員做出一個正確的選擇呢?
我不希望展開一場PHP、NodeJs兩大陣營之間的戰爭,我將會對比這兩種語言所在領域的發展狀況:
PHP
Rasmus Lerdorf在1994年創造出了PHP.它是由安裝在web服務器(Apache、Ngix)上的組件運行的.
PHP代碼可以和HTML混合到一塊. 對于初學者就能很快寫出很有價值的代碼,這并不必要太多的練習. 這讓PHP變得越來越流行, 現在全球百分之八十的服務器上都在運行著PHP.全球四分之一的網站都在用的一個內容管理系統--WordPress,就是用PHP寫的.
Node.js
Ryan Dahl在2009年創造了Node.js.它是基于Google的V8 JavaScript解釋引擎(在Chrome瀏覽器里它負責執行客戶端的JavaScript代碼).與其它語言不同的是Node.js內置了處理網絡哀求和響應的函數庫,所以你不需要單獨的服務器(Apache、Ngix)或者其他依賴.
Node.js雖然很新但是很快就獲得了極大的追捧.在很多的大公司都有在使用,例如:Microsoft,Yahoo,LinkedIn和PayPal.
我們所鐘愛的C#、Java、Ruby、Python、Perl、Erlang、C++、Go、Dart、Scala、Haskell等等,它們呢?
如果文章里邊比擬了如上所有語言的各種參數,文章將會非常長,你還會讀它么?你期望一個程序員了解所有的程序開發語言嗎?這顯然是不可能的.我主要對PHP和Node.js做了比擬,主要原因如下:
首先它們之間值得比擬.兩者都是開放源碼,都是致力于web開發,并且都可用于相似的項目.
PHP已經發布了很久了,但是Node.js才剛剛興起,并受到越來越多的關注.難道PHP的程序員應該相信Node.js的宣傳?應該考慮轉換語言?
我了解,熱愛編程語言,自從20世紀90年代之后我就一直使用PHP和JavaScript,并且也有幾年的Node.js的經驗.除此之外我也涉獵了其他的技術,但是在這里我還不能對他們作出客觀評價.
另外,對多少語言做比較不重要,因為總會有某些地方的某些人埋怨我沒有提到他們語言.
SitePoint上的角逐
程序員會花費很多時間來提升他們本身的編程能力.一些人有編程語言之間的延伸能力,但是這些達到更高層次的人根據很多的因素來做出他們本身的選擇.從主觀方面來說,你將會推進并且捍衛你的技術決策.
SitePoint Smackdowns并沒有采取“選擇適合你自己的,朋友”這樣的觀點.我將會根據個人的經驗、要求和愛好提出建議.你可能不會同意所有的我所說的所有觀點,這并不重要,重要的是你的意見將會給其他人做出更加明智的選擇.
評估辦法
下面將會對 PHP 和 Node.js 進行十個輪次的比擬.每個回合都會考量可以應用到任意 web 技術的常見的開發挑戰.我們不會太深入討論細節;很少有人會關心隨機數生成器或數組排序的價值.
贏得最多回合的將會是優勝者.準備好了嗎?開始比力吧......
第一輪:起步
創建一個“Hello World” web 頁面有多快呢?在 PHP 中:
<?php echo 'Hello World!'; ?>
這段代碼可以放置在可以被 PHP 引擎解析的任意文件中--通常,是以 .php 為后綴的文件.在瀏覽器中輸入 URL 跳轉到文件即可.
不可否認,這不是全部.這段代碼只能運行于安裝了 PHP 的 web 服務器(PHP 有一個內置的服務器,盡管如此,最好還是使用一個更健壯的服務器).大多數操作系統提供了服務器軟件,如 windows 上的 IIS,Mac 和 Linux 上的 Apache,盡管它們必要啟動和配置.通常使用提前構建的安裝程序,如 XAMPP或虛擬機鏡像(如 Vagrant).一種更簡單的方式:上傳你的文件到任意的 web 主機.
對比而言,安裝 Node.js 輕而易舉.你可以 下載安裝程序 或者 使用擔保理器. 接下來讓我們在 hello.js 中創建 web 頁面:
var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World!'); }).listen(3000, '127.0.0.1');
在瀏覽器中拜訪 http://127.0.0.1:3000/ 之前,你需要在終端輸入 node hello.js 來啟動應用程序 .通過上面的五行代碼,我們已經創建了一個小型的 web 服務器,盡管這很令人吃驚,但是即便擁有很強客戶端 JavaScript 經驗的人也很難理解.
PHP 在概念上更簡單所以贏得本輪.稍微懂得一些 PHP 聲明的人就可以開發一些有用的東西.PHP 有更多的軟件依賴,但是 PHP 的概念對于新手來說不那么繁瑣.
懂一些 JavaScript 和開發 Node.js 應用是兩回事兒,Node.js 開發辦法和大多數服務端技術不同,你需要先弄明白一些相當復雜的概念,比如關閉和回調函數.
第二輪:贊助和支持
沒有官方文檔和資源(課程,論壇,堆棧溢出)的贊助你必將舉步維艱. PHP 在本輪輕易勝出,她有大量的指南和二十年的 Q&A.無論你想做什么,總會有人在你之前已經面對過同樣的問題.
Node.js 擁有很好的文檔,但是更加年輕,能提供的贊助較 PHP 也少.JavaScript 在市面上的時間和 PHP 一樣久,但是主要的贊助都是針對瀏覽器開發的,那基本沒啥贊助.
第三回合: 語言語法
聲明與結構是不是符合邏輯而且簡單好用?
不像一些語言跟框架,PHP 不會限制你按特定的方式編寫,具體怎么搞隨你.你可以從幾行的程序開始,然后添加些辦法,進而寫一些簡單的 PHP4 模式的對象,最后編寫優雅的面向對象的 MVC 模式 PHP5+ 的應用.你的代碼開始可能比較混亂,但也能工作,而且會隨著理解的深入越寫越好.
PHP 的語法在版本間可能略有調整,但是向后兼容一般都做得很好.但不幸的是,這也導致了一個問題:PHP 很混亂.例如,怎么統計一個字符串中字符的個數?是 count?str_len? 還是 strlen?亦或 mb_strlen?PHP 有數以百記的函數,而且命名規則也也不完全一致.可以試試不查文檔寫幾行代碼.
JavaScript 相對就簡單些,只有幾十個核心聲明.不過語法就經常被開發者噴了,因為它的原型化對象模型看起來平易近人,實際上卻不是.而且各種數學錯誤(0.1+0.2 != 0.3)以及類型轉換的混亂('4' + 2 == '42' 和 '4' - 2 == 2)也招致不少埋怨,但這些情況世界很少導致什么問題,多數語言都有這種借口.
PHP 有他的優點,但是這回合我判 Node.js 勝.理由如下:
JavaScript 是世界上最難理解的語言 ― 但是,當哪天你頓悟以后,概念一通,就會發現其他語言都太過愚笨了.
JavaScript 代碼比 PHP 簡潔.例如,你再不必要跟 JSON 轉來轉去―― UTF-8 也不用
全棧工程師可以同時在客戶端與服務端使用 JavaScript .大腦不必要來回切換.
深入理解 JavaScript 會讓你更想用它,但是 PHP 不是這樣.
第四輪:開發工具
兩種技術都有一些很好的編輯器,集成開發環境,調試器,驗證器和其他工具.我認為這是平局,但是這里有一些工具給 Node.js 些許優勢:NPM-擔保理器. NPM 允許你安裝和管理依賴,設置配置變量,定義腳本和其他.
PHP 的 Composer 項目受 NPM 激發,在有些方面更強.但是,PHP 在默認情況想不提供,活動庫較小,在社區的影響更小.
Grunt 和 Gulp 之類革新了開發辦法的構建工具的壯大,NPM 也有一部分功勞.有時候 PHP 開發者也許想要/需要安裝 node.js,這不是倒退.
第五輪:環境
技術可以在哪使用和部署?支持哪些平臺和生態系統?網頁開發者經常需要開發一些并不完全針對網頁的應用,好比構建工具,遷移工具,數據庫轉換腳本等.
PHP 有方法開發桌面應用和命令行工具,但是你不會使用他們.本質上,PHP 是一個服務端技術,他很擅長該領域,但是很少延伸到這之外.
若干年前,JavaScript 被認為限制很多,有一些邊沿技術,但是他的主戰場還是瀏覽器.Node.js 已經改變了這一感覺并井噴出了很多 JavaScript 項目,你可以在任何地方使用 JavaScript:瀏覽器,服務器,終端,桌面甚至嵌入式系統,這使得 JavaScript 無處不在.
第六輪:集成
開發技術很受限制,除非他們能與數據庫和驅動集成.PHP 在這方面很強,PHP 面世已經很多年,他的擴展使他能和擁有主流或冷門的 API 的服務器直接通訊.
Node.js 正在迎頭直追,但是你也許會為某些老舊,冷門的技術尋找成熟集成組件而頭疼.
第七輪:托管和部署
部署你絢麗新應用到在線網頁服務器有多容易?這是 PHP 的另一次完勝.隨機聯系某個網頁托管公司你可以找到對主要的 PHP 支持,也許還免費附送 MySQL.對于沙盒,PHP 被認為更簡單,有風險的擴展可以被禁用.
Node.js 是個不同的野獸,服務端的應用永遠運行.你必要一臺物理/虛擬/云或定制的服務器環境,最好有 root 權限,這對有些服務器來說遙不可及,特別是那些共享的服務器,你有可能讓整臺服務器宕機.
Node.js 托管將會變得簡單,但是我認為他永遠沒法像 FTP 上傳一些 PHP 文件那么便利.
第八輪:性能
PHP 很勤快,有很多項目跟選項可以使它跑得更快.即使那些對性能要求很嚴苛的 PHP 開發者也幾乎不會擔心速度問題, 但是 Node.js 性能通常更好一些. 當然,性能很大程度上決定于開發團隊的經驗以及是否上心, 但是 Node.js 還是有如下幾條優勢的:
更少的依賴
所有對 PHP 應用的哀求都必須經過一個 WEB 服務器的路由,來啟動 PHP 的解釋器運行 PHP 代碼.Node.js 不需要這些依賴, 而且你基本一定會使用一個帶服務器的框架,像 Express,他很輕量,很好的扮演你應用的一部分.
更小更快的解釋器
Node.js 的解釋器比 PHP 的更小更靈活. 他并不受舊版語言遺留兼容問題的拖累,而且 Google 在 V8 引擎性能改善上出了大力.
應用永久在線
PHP 遵循標準客戶端-服務端模型. 每個頁面哀求都會初始化應用; 你讀取配置參數、連接數據庫、讀取信息、渲染 HTML.Node.js 應用持久運行,只需要啟動一次.例如,你可以創建一個單獨數據連接對象,然后所求哀求一起復用.公認的,PHP 也有一些途徑來實現,比如使用 Memcached ,但是這已經不是語言的標準特性了.
事件驅動,無阻塞 I/O
PHP 跟其他多數服務端語言采用阻塞執行的模型. 當你執行一個命令,好比從數據庫取數據,那么必須等這個指令執行完成后,才會執行下面的內容. Node.js 通常不會等的. 取而代之的是, 你需要提供一個回調函數,這個函數當指令執行完后會被調用一次.例如:
這個例子中, 控制臺會先輸出‘finished',然后輸出‘N records returned',因為 process 函數是所有數據返回的時候才被調用的. 換句話說,當解釋器在其它進程處理的時候可以干些別的事情.
注意情況比擬復雜,還有幾個警告:
Node.js/JavaScript 只能在單線程上運行,但是大多數 web 服務器都是多線程,而且并發的處理哀求.
一個用戶長時間運行的 JavaScript 處理會阻止其它用戶的代碼執行,除非拆分任務或者使用Web Workers.
基準測試是主觀的和有缺陷的;可以找到一些例子 Node.js 比擬好,而一些相對的例子 PHP 比擬好 .程序員只是在嘗試證明他們的信仰!
書寫異步的事件驅動的代碼非常復雜,非常有挑戰性.
我只能從我的經驗來講: 我的 Node.js 應用要明顯比 PHP 的同等應用要快.你的可能不是,但是不試是永遠不會知道的.
第九輪:開發者激情
這會超出”常見網頁開發挑戰“這樣的目標,但是這很重要.如果你恐懼每天寫代碼,那你無所謂哪門語言更好.
很難為此做出比擬但是一些 PHP 開發者對 PHP 這門語言很有激情.你最近一次讀到讓你走心的 PHP 文章或幻燈片是什么時候?也許已無需再說?可能是更低的曝光度?或者我沒找對地方?PHP7 有一些新的功能,但是該技術已經原地踏步很多年了,雖說如此,很少有開發人員對PHP發牢騷.
JavaScript 分離了社區,有人愛也有人恨,一些程序員在中間猶豫不決,經管如此,對 Node.js 的反饋大多積極,她正處于風口浪尖,一部分原因是因為她很新,贊譽不必定持續.目前,Node.js 贏得本輪.
第十輪:前景
您選擇采用哪種服務端語言并不重要;即使她不再被更新也會照樣繼續工作(yay ColdFusion!)盡管使用量上趨于穩定但是很多人依然使用 PHP,我打包票她還能再堅挺二十年.
Node.js 崛起得很迅速,她提供了一種現代的開發方式,使用和客戶端開發一樣的語法同時支持 HTML5 變革式的特征,好比網絡套接字和服務端發送事件.盡管大家對該語言的分叉函數有些爭議,但是Node.js的使用量還是呈指數級增長.
Node.js 勢必會蠶食 PHP 的市場份額,但是我不認為她能完全取而代之.兩種技術都有光輝的未來.我宣布本輪平手.
最終贏家
最終分數:Node.js 贏得5輪,PHP 贏得4輪,一輪平手.原以為會倒向其中一方,結果比我預想的更中庸一些.
Node.js 有一定的學習曲線,對新手來說不夠抱負但是她贏得了本次對決.而且,如果你是位喜歡該語言的靠譜的 JavaScript 程序員,Node.js 不會讓你失望.她更新潮而且提供自己網頁開發的體驗,你不會思念 PHP.
但是不要貶低 PHP,PHP 依然有活力,你不該因為 Node.js 快一些,新一些或新潮一些就去緊跟 Node.js 潮流.PHP 易學而且依然支持專業的編程技巧,贊助無處不在而且開發簡單.甚至死忠的 Node.js 開發者也不得不在簡單網站和應用時考慮使用 PHP.
我的建議是:評估選項,根據你的需求來選擇一門語言,這比本文這樣的”對比“文章靠譜得多.
以上所述便是本文的全部內容了,希望大家能夠喜歡.
維易PHP培訓學院每天發布《PHP編程:簡單談談PHP vs Node.js》等實戰技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養人才。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/9455.html