PHP vs Node.js 之爭由來已久,前者用於動態網頁開發,後者是用來編寫高效能網頁伺服器的 JavaScript 工具包,到底他們如何? InfoWorld 測試中心的 Peter Wayner 日前撰文指出兩者的優勢所在,不妨一看。
以下為譯文:
這是典型好萊塢情節:分道揚鑣的兩位老朋友間的戰鬥。摩擦經常開始於一位對另一位不言而喻的領域感興趣。這部電影的程式語言版本是 Node.js 的引入將好友情節變成一場旗鼓相當的比賽。 PHP 和 JavaScript,兩個曾經一起統治網路的合作夥伴現在為了開發者心中的份額開始一決雌雄。
在過去,他們的合作關係很簡單。 JavaScript 處理瀏覽器上的小細節,PHP 處理所有的存在於 80 連接埠和 MySQL 的伺服器端任務。這個幸福的聯合不斷支持著網際網路的許多關鍵部分。在 WordPress、Drupal 和 Facebook 上,人們幾乎不會離開 PHP 一分鐘。
但是,後來一些聰明的孩子發現他能讓 JavaScript 運作在伺服器上。突然,我們發現沒必要使用 PHP 建置下一代伺服器堆疊了。一種語言就足以建立 Node.js 和運行在客戶端的框架。對某些人來說,「JavaScript 無所不在」變成了咒語。
當然,結局並沒有寫完。相比較與吹噓 Node.js 的純粹和 JavaScript 無處不在的簡單的程式設計師,還有另外的程式設計師,他們對深度程式碼庫和了解 PHP 的穩定性感到滿意。怪老頭能夠擊退伺服器端新貴嗎? JavaScript 能推翻它的老朋友,實現統治世界嗎?我們在微波爐裡再抓一把爆米花,坐下來瞧。
PHP 贏在何處:混合內容的程式碼
你正在打字,想法隨之變成你網站中的文字。你要為進程添加一個分支,根據 URL 的一些參數,一點 if-then 語句就會使它看起來很漂亮。或者可能你想從資料庫加入文字或資料。用 PHP,你能打開 PHP 魔法標籤在幾秒鐘內開始寫程式碼。不需要模板——一切都是一個模板。不需要額外的文件或煞費苦心的體系結構,因為可程式邏輯能量就在你的指尖。
Node 贏在何處:分離的內容
混合內容的程式碼是拐杖,最終會使你受到損害。當然,在最初的兩到三次,混合 HTML 程式碼是有趣的。但是不久,你的程式碼庫亂成一團。真正的程式設計師添加結構,從邏輯層分離出裝飾層。對新的程式設計師來說,程式碼很容易理解清楚,便於維護。運行在 Node.js 的框架由這樣的程式設計師所建造,他們知道當模型,視圖和控制器分離時,生活會變得更好。
PHP 贏在何處:深的程式碼庫
網路充滿了 PHP 程式碼。最受歡迎的建置網站平台(WordPress、Drupal 和 Joomla)都是用 PHP 寫。不只這些開源平台,大部分他們外掛也是用 PHP 寫。網路上到處有 PHP 程式碼,它等著你去下載、修改和為你所用。
Node 贏在何處:新的代碼意味著更多現代特徵
當然,網上有數以千計的開源 PHP 文件,但是一些是 8 歲的 WordPress 插件希望、祈禱有人下載它們。有誰願意去花幾個小時、幾天或是幾週的時間去倒騰那些已經好幾年沒有更新的程式碼? Node.js 外掛不僅是新的,而且是用最新體系的完整知識建構而成。
PHP 贏在何處:簡單(在一定程度上)
PHP 中沒有太多的東西:幾個處理字串、數字的變數和基本函數。它除了把資料從 80 埠移動到資料庫並返回,不會做的太多。這是應該做的。現代資料庫是個神奇的工具,它能離開重的負載。對不應該複雜工作,PHP 的複雜度是適量的。
Node 贏在何處:閉包和更多的複雜性
JavaScript 可能會有許多把一些人逼瘋的小特質。但在大多數情況下,它是一個娛樂現代語法的現代語言,有幾個有用的特徵,例如閉包。你能輕鬆地重新配置和拓展它,使強 大的函數庫像 jQuery 成為可能。你能像傳遞物件一樣四處傳遞函數。為什麼要限制自己呢?
PHP 贏在何處:不需要客戶端應用程式
所有的關於在瀏覽器和伺服器上使用相同的語言的討論是好的,但是如果你不需要在瀏覽器上使用任何語言呢?如果你運送 HTML 表單中資料呢?瀏覽器彈出,不會出現被未啟動的 JavaScript 造成的令人頭痛的事情和小故障,這個 JavaScript 試圖在瀏覽器上創建一個來自二十多個 web 服務呼叫的頁面。純粹的 HTML 比其他東西工作更頻繁,而 PHP 是最優化去創建 HTML。為何費心在瀏覽器上用 JavaScript 呢?在伺服器上建立所有操作,避免小型手機上的小瀏覽器重載。
Node 贏在何處:與 HTML-fat PHP 呼叫相對的瘦服務調用
雖然 AJAX-crazy HTML5 Web 應用程式有許多移動部件,他們很酷,非常有效。一旦 JavaScript 程式碼在瀏覽器快取中,新資料沿著線路移動。這沒有大量的 HTML 標記語言,不重複地去下載整個頁面。只有數據改變了。如果你願意投入時間創建一個平滑的瀏覽器端 Web 應用程序,這將會有不錯的報酬。 Node.js 是最佳化地去傳送數據,僅僅只有數據通過 Web 服務。如果你的應用程式是複雜而又資料豐富的,這將是有效傳送的良好基礎。
PHP 贏在何處:SQL
PHP 與 MySQL 和它的許多變體,例如 MariaDB。如果 MySQL 不全是正確的,還有其他的來自 Oracle 和 Microsoft 的偉大的 SQL 資料庫。你的程式碼用很少的改變就能轉換成你的查詢。廣闊的 SQL 世界沒邊界。一些最穩定,成熟的程式碼與 SQL 資料庫連接,這意味著所有力量也能輕鬆地被整合到 PHP 專案中。它可能不是完美幸福的家庭,但它是大的。
Node.js 贏在何處:JSON
如果你必須接入 SQL,Node.js 的函數庫可以做到。但 Node.js 也有 JSON,一個與許多最新 NoSQL 資料庫互動的通用語言。這並不是說你不能為你的 PHP 堆疊取得 JSON 函式庫,但當使用 JavaScript 時有些流體可使用 JSON 的簡單性去處理。這是從瀏覽器到 Web 伺服器,再到資料庫的語法。冒號和花括號在每個地方的作用相同,這節約了你的時間。
PHP 贏在何處:編碼速度
對大多數開發者,編寫PHP Web 應用程式感到更快:沒有編譯器,沒有部署,沒有JAR 文件或預處理器——僅僅是你喜歡的編輯器和一些PHP 檔案目錄。你的進度會不同,但就一起快速確定專案而論,PHP 是很好用的工具。
Node.js 贏在何處:原始速度
編寫 JavaScript 程式碼的過程中,當你在計算花括號和圓括號時,它有點難,但是編寫成功後,你的 Node.js 程式碼可以飛。它的回呼機制很巧妙,因為能幫你節省運行線程的時間。核心被建好,旨在為你做一切,這不是每個人想要的嗎?