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