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

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

遙想當年,合作關係總是簡單而純粹。那時候JavaScript負責處理瀏覽器上的細枝末節,而PHP則管理著存在於埠80與MySQL之間的全部伺服器端任務。當時雙方保持著愉悅的合作心態,並不斷為網際網路旗下的各種關鍵性部件提供支援。無論是WordPress、Drupal還是Facebook,缺少了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
評論(2)

相關文章