被“嫌棄”的PHP:未來仍光明
現如今,厭惡 PHP 和贊美新技術(如 Node)幾乎成了一種奇想。特別是在年輕的社區,PHP 被認為是一只“恐龍”。
PHP 是一門偉大的編程語言。
它并不完美,有利有弊,但總的來說,如果你從事 Web 開發工作,你最好試著去理解它,而不是跟風去厭惡它……
你甚至可以從中學到一些東西!
我們來看看 PHP 和 Node 之間的區別,這些區別讓很多人留在了 PHP 平臺,也讓其他人轉向了不同的編程語言!
社區
PHP 社區比 Node 社區大。
NPM/Node 社區也很大,但缺乏能夠真正維護好和做好 Node 包的人。
很多模塊被棄用或不再更新。最糟糕的是,大多數模塊依賴了其他大量的模塊,這意味著如果你使用的模塊依賴了一個包含漏洞的舊模塊,你可能不知情,或者需要花很多時間自己去更新所有的東西。
這很重要,因為不管一門編程語言或一個框架有多好,如果沒有人維護,或者如果沒有關于它的討論、PR或者開源項目,它最終就會消亡。
PHP 生態系統為你提供了大量的庫:JWT 身份驗證、生成 Excel 電子表格和 PDF、緩存管理、ORM 框架……這些庫被廣泛使用,具有很好的安全性,且提供了良好的文檔。
Symfony 框架也提供了一些官方文檔,比如 LexikJWTAuthentication!
事實上,大約 80% 的 Web 應用使用 PHP 開發。
框架
Symfony 和 Laravel 這兩個主要的 PHP 框架現在是 Web 的一個巨大組成部分。Laravel 在美國很受歡迎,Symfony 在歐洲很受歡迎,如果我們把 WordPress 去掉,這兩個框架占了 PHP 生態系統的 90% 以上。
這些框架比大多數 Node 的框架都要老,并且比現在的 Node 框架擁有更廣泛的包和文檔生態系統。
在使用 Symfony 過程中遇到了問題?版本 3?版本 4?這都不是事!大量的 StackOverflow 帖子、Medium 文章、官方文檔可供你參考。
Symfony 和 Laravel 也提供了一些“基本的項目結構”,你當然可以不用它,你可以按照你想要的方式構建你的項目,但這些基本模式通常適用于多種類型的應用。
在大多數情況下,我們可以通過配置對它們進行調整,以滿足我們的各種需求。由于這些框架已經推出了好幾年,你可能想到的大多數有用的特性都已經有了,因為在你之前的那些開發人員也有與你同樣的需求。
我們以 Express 為例,它是 Node 最著名的框架,主要用于編寫 API,它并沒有提供強制的結構。這意味著一個沒有經驗的開發人員更有可能構建出一些不符合標準的東西,而 PHP 框架在這方面的風險要小得多。
性能
Node 的速度很快,在某些情況下比 PHP 更快,但 PHP 也不是太糟糕。
PHP 8.1 借助 OPCache 和 JIT 編譯獲得更快的執行速度。
Node 在速度方面利用了它的異步特性,但它是單線程的。PHP 利用了在多個線程上運行的優勢,而且是同步的。
事實上,現在服務器的價格一般都不會很高,伸縮一個 Web 應用從未像今天這樣容易。對于小型 Web 應用來說,鑒于如今的計算能力,性能不再是一個值得花太多時間去爭論的點。
然而,對于大規模的應用程序,價格可能是一個關注點。
這就是為什么把常用的 PHP-FPM/Nginx 棧換成 Swoole 會是一個不錯的選擇。
我曾經看到過一些 PHP 應用程序將 Swoole 作為底層的 HTTP 服務器,在性能上擊敗了 Node!
此外,使用消息隊列是平衡應用程序工作負載的一個很好的方法,這可以很容易地使用 PHP 和 Node 來實現。
易用性
雖然 Node/Express 經常被用來編寫 API,并與使用 React/Angular/Vue 等框架構建的前端通信,但大多數 PHP 框架都采用了 MVC 模式。
MVC 即模型視圖控制器。一張圖片勝過長篇大論:如果你不了解 MVC,這里有一張圖可以幫你快速理解 MVC 模式。
構建一個前后端分離的應用程序通常比使用支持前后端技術棧的框架要慢。事實上,許多后端開發人員知道如何編寫出色的 HTML/CSS,但不熟悉 React 或其他框架的概念或語法。
結論
PHP 和 Node 各有優點和缺點。
如果你需要穩定性、可靠性和長期支持,我建議使用 PHP。
這些框架成熟且安全,在我看來是首選。
不過,對于需要高吞吐量和實時數據處理的 API 來說,Node 是一個不錯的選擇。另外,有一些項目不能用 PHP 來完成,比如 Discord 機器人(盡管可能可以用 PHP 來實現,但已經有一個官方的 JavaScript 庫……)
有時候,用另一種編程語言來開發應用程序也是不錯的,我們可以從中發現一些新的概念或做事的方式,然后將它們應用到其他編程語言中。