PHP對戰Node.js:一場關于開發者喜好的史詩級戰役

jopen 9年前發布 | 18K 次閱讀 Node.js

原文  http://developer.51cto.com/art/201501/464543.htm

PHP對戰Node.js:一場關于開發者喜好的史詩級戰役

整個故事正如好萊塢大片的經典劇情走向:兩位昔日好友如今分道揚鑣,甚至被迫陷入了你死我活的斗爭當中。剛開始的分歧并不嚴重,無非是一位老友對 于另一位伙伴長久以來占據、但又絕口不提的業務領域產生了點興趣。而在現實版的這場編程語言決斗大電影中,Node.js成了那位成了好兄弟反目成仇的導 火索,并由此引發一場勢均力敵、旗鼓相當的大戰:PHP與JavaScript,雙方曾一度攜手統治整個互聯網世界,但如今卻為了爭奪開發人員的支持而向 對方痛下殺手。

遙想當年,合作關系總是簡單而純粹。那時候JavaScript負責處理瀏覽器上的細枝末節,而PHP則管理著存在于端口80與MySQL之間的 全部服務器端任務。當時雙方保持著愉悅的合作心態,并不斷為互聯網旗下的各種關鍵性部件提供支持。無論是WordPress、Drupal還是 非死book,缺少了PHP、人們在網絡中幾乎一分鐘也待不下去。

然而某位機靈的技術人員發現了一個驚人的秘密:JavaScript也完全能夠運行在服務器之上。幾乎在一夜之間,我們似乎根本用不著借助PHP 的力量來打造下一代服務器堆棧了。單憑一種語言,我們已經能夠構建起Node.js以及其它各類運行在客戶機上的框架。“JavaScript無處不在” 甚至成為一部分開發人員的工作信仰。

當然,這個故事的結局還沒有敲定。對于每一位到處宣揚Node.js先進性以及JavaScript便捷性的開發人員來說,總有跟自己作對的家伙 存在——他們更傾向于PHP深邃的代碼基礎以及長期穩定的實際表現。那么這位舊日支配者能夠在自己多年盤踞的服務器端主場上擊潰挑戰方 嗎?JavaScript又是否會無情地推翻自己的老朋友,完成自己的天下一統野心?請大家拿起手中的爆米花桶與可樂,共同觀看這場精彩紛呈的同室操戈好 戲。

PHP勝出:代碼與內容混合

大家在輸入的過程中當然希望能將自己的思路直接轉化為網站的文本內容,同時還要為進程添加分支、一部分if-then語句以保證站點擁有漂亮的視 覺效果,具體取決于URL中的某些參數。又或者,我們希望能夠利用單一數據庫將文本或者數據加以混合。在PHP的幫助下,大家只需要打開魔法般的PHP標 簽,幾秒之內即可開始編寫代碼。是的,不需要任何模板——因為一切都已經從屬于模板了!也用不著使用額外的文件或者復雜架構,可編程邏輯的強大力量就在我 們的指尖、等待著各位的調遣。

Node.js勝出:關注點劃分

將代碼與內容加以混合像一把神奇的拐杖,雖然開始能夠很好地引導使用者、但最終卻往往變成沉重的負擔。誠然,將代碼與HTML混合在一起確實相當 有趣——至少前幾次體驗時是如此。但很多我們的代碼庫就會變成一大堆邏輯相互雜糅的亂麻。真正的程序員會向其中添加結構,并把修飾層從邏輯層當中劃分出 來。很明顯,新手開發人員能夠借此對項目擁有更清晰的認識,也更易于完成后續維護工作。運行在Node.js之上的各類框架正是由這樣一群程序員們所打 造,他們很清楚當模型、視圖以及控制器得到明確劃分之后,生活會變得更加美好。

PHP勝出:深邃的代碼庫

整個網絡世界充斥著大量PHP代碼。用于構建網站的各類主流平臺(包括WordPress、Drupal以及Joomla等等)都是由PHP語言 所寫就。除了這些平臺之外,大部分相關插件同樣以開源代碼的形式存在。總而言之,PHP代碼可謂唾手可得,等待著大家對其進行下載、修改并根據需要靈活運 用。

Node勝出:新生代碼意味著現代功能

不可否認,成千上萬的開源PHP文件確實能幫助大家更輕松地完成項目開發,但其中也有不少已達八歲高齡的WordPress插件等待并盼望著開發 人員將其下載并加以運用。誰愿意用幾小時、幾天甚至幾個禮拜時間對這些多年未曾更新的代碼進行調試?至少我不愿意。Node.js插件不僅更加年輕,而且 也享受到了最新架構方案所帶來的種種便利。開發這部分代碼的程序員們非常清楚,現代Web應用程序應當為客戶端引入更多智能化元素。

PHP勝出:便捷性(或多或少吧)

PHP語言在使用過程中并沒有太多可說的:幾種變量再加上由字符串與數字構成的基本函數就是它的一切。這是一套非常專注的解決方案,用戶所期望的 僅僅是利用它將數據由端口80移動至數據庫及后端當中。PHP沒有太大的野心,能很好地完成這項任務就是它的天職。現代數據庫不啻為一類奇跡般的工具,因 此我們大可以將各類沉重的負載交給它負責處理。PHP是一種復雜程度適中的處理手段,我們根本沒必要刻意讓它變得難以使用。

Node勝出:閉包復雜性等

JavaScript在使用中的一些小別扭可能會令某些開發人員抓狂,但總體而言這是一套現代編程語言、其中包含大量現代化語法加上以閉包為代表 的一系列實用特性。大家可以輕松對其進行重新配置與擴展,從而使jQuery等強大的庫成為可能。我們用不著為對象之類的功能而心煩。為什么要跟自己過不 去呢?

PHP勝出:不需要客戶端應用

大家都說,如果能在瀏覽器以及服務器上使用同一種語言,那么實際效果肯定是最好的。但如果我們根本用不著在瀏覽器上使用任何語言,結果豈不是更理 想?如果我們能夠直接以HTML格式實現數據輸出呢?瀏覽器能夠直接接納這些數據,而且用不著忍受JavaScript線程嘗試利用幾十次Web服務調用 在瀏覽器上創建頁面所引發的各類麻煩與故障。純HTML往往比其它形式擁有更出色的運行效果,而PHP恰恰針對此類創建任務作出了全面優化。為什么要費心 把JavaScript引入瀏覽器當中?在服務器上構建一切,并盡量避免把過于繁重的任務交給小手機上的小瀏覽器打理,這才是正確的解決思路。

Node勝出:服務調用比臃腫的PHP HTML調用更為精簡

盡管AJAX常常將大量活動部件塞進HTML 5 Web應用當中,但它們確實很酷——而且極具實效優勢。一旦JavaScript代碼進入瀏覽器緩存,需要在網絡線路間往來傳輸的就只剩下新數據了。在這 里我們不需要面對成噸的HTML標記,而且無需重復下載整個頁面內容。只有其中的數據會發生變化。如果大家愿意花點時間來創建一款精致的Web應用程序, 那么它絕對能給各位帶來理想的回報。Node.js針對數據交付機制作出了深入優化,而且數據只需要提供給Web服務。如果大家的應用程序非常復雜而且充 斥著大量數據,那么Node.js無疑為信息的有效傳遞建立起良好的基礎。

PHP勝出:SQL

PHP的設計思路本身就考慮到了與MySQL及其多種變體——例如MariaDB——的共存協作需要。如果MySQL不足以應對大家的實際需求, 那么還有更多來自甲骨文及微軟的其它卓越SQL數據庫可供我們選擇。我們的代碼能夠在經過簡單的發動下轉化為查詢指令。廣闊的SQL世界可謂一望無際,而 且其疆域仍在不斷拓展當中。相當一部分穩定性最出色、開發水準最高的代碼都會與SQL數據庫進行對接,這意味著所有這些強大的能力最終將能被輕松集成到 PHP項目之內。也許整套生態系統還稱不上完美而又和諧的家族,但其可觀的規模卻絕對不容否認。

Node.js勝出:JSON

如果大家必須接入SQL,那么Node.js也提供相關庫來完成這項任務。但除此之外,Node.js還能與JSON互通,這套通用方案能夠與眾 多最新NoSQL數據庫實現交互。這并不是說我們沒辦法在自己的PHP堆棧中獲得JSON庫,但在將JSON與JavaScript配合使用時、往往能夠 帶來簡單便捷的任務處理流程。通過這種方式,我們能夠保證從瀏覽器到Web服務器再到數據庫全部使用同一種語法,其中冒號與括號的使用方式及作用完全相 同。這將幫助大家在節省開發時間之余,顯著降低代碼編寫時的挫敗感。

PHP勝出:編碼速度

對于大部分開發人員而言,利用PHP編寫Web應用程序往往能夠得到更為高效的編碼體驗:用不著編譯器、無需部署、更不用提JAR文件或者預處理 機制——只需要利用自己最喜愛的編輯器以及目錄中的部分PHP文件,開發工作就能水到渠成。各位的實際開發流程也許有所不同,但說起快速搞定項目的神兵利 器,PHP在這場內斗中絕對是當仁不讓。

Node.js勝出:原始速度

如果從代碼本身的大括號與小括號數量角度來看,編寫JavaScript代碼的難度確實更高一些,但在開發工作結束后、Node.js代碼的運行 速度卻極為驚人。回調機制的引入堪稱天才之舉,因為這能大大節約我們處理不同線程的時間。代碼的核心構建良好而且專門設計用于實現我們的實際需要。這不正 是每一位開發人員夢寐以求的效果么?

英文:http://www.infoworld.com/article/2866712/php/php-vs-node-js-an-epic-battle-for-developer-mind-share.html

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!