Node.js 與 PHP:理解服務(wù)器端開發(fā)
譯文【51CTO.com快譯】選擇合適的語言、框架、庫和數(shù)據(jù)庫工具包是成功執(zhí)行項(xiàng)目的第一步。雖然了解每個工具的優(yōu)缺點(diǎn)是執(zhí)行這種比較分析的合理途徑,但如果前端和后端開發(fā)團(tuán)隊(duì)了解適當(dāng)?shù)毓ぞ撸ぷ餍蕰蟠蠛芏唷?/p>
服務(wù)器端開發(fā)對于設(shè)計基于web的功能性和流動性產(chǎn)品(網(wǎng)站、應(yīng)用程序或原生web應(yīng)用程序)至關(guān)重要??蛻舳碎_發(fā)涉及用戶體驗(yàn)和信息的布局方式。服務(wù)器端開發(fā)負(fù)責(zé)高效組織和訪問存儲在數(shù)據(jù)庫和 Web 應(yīng)用程序中的數(shù)據(jù),使用靜態(tài)資源(如 CSS 和 JavaScript 或 HTML 模板)甚至數(shù)據(jù)進(jìn)行訪問。
因此,在為開發(fā)下一個項(xiàng)目時,了解服務(wù)器端開發(fā)的基本要求至關(guān)重要。
一、服務(wù)端開發(fā)的基本要求
1. 投入產(chǎn)出模型
無論使用何種語言、框架和庫進(jìn)行開發(fā),基本流程或多或少都保持不變。使用的系統(tǒng)調(diào)用,始終與內(nèi)核交互。
系統(tǒng)調(diào)用負(fù)責(zé)向內(nèi)核提供請求,內(nèi)核在設(shè)備級別執(zhí)行這些請求。這種安排確保所有特定于設(shè)備的計算都在內(nèi)核級別完成,并且應(yīng)用程序不必處理過多的計算負(fù)載。
2. 阻塞與非阻塞調(diào)用
系統(tǒng)調(diào)用通常被確定為阻塞調(diào)用。“阻塞”是指內(nèi)核等待返回結(jié)果或信息的時間。例如,內(nèi)核可能會等待設(shè)備準(zhǔn)備好進(jìn)行計算,或等待訪問某些設(shè)備數(shù)據(jù)等。這些挑戰(zhàn)會導(dǎo)致阻塞調(diào)用,就意味著指令在幾毫秒內(nèi)不會執(zhí)行完畢。
非阻塞調(diào)用對工程師來說更復(fù)雜,但可以節(jié)省關(guān)鍵的計算資源。對于這種安排,可以命令內(nèi)核在必要的數(shù)據(jù)可用時發(fā)出警報,同時將請求放入隊(duì)列中。其他可以立即執(zhí)行的功能會立即執(zhí)行。
3. 調(diào)度
如果正在創(chuàng)建一個全面的產(chǎn)品,在某些時候,線程和進(jìn)程的數(shù)量將達(dá)到臨界質(zhì)量,將不得不為調(diào)度提供更多的考慮。用最簡單的術(shù)語來說,調(diào)度是上下程序切換,允許一個線程接著一個線程或一個進(jìn)程接著一個進(jìn)程執(zhí)行的步驟。
如果有太多的阻塞調(diào)用,那么在數(shù)千個線程和進(jìn)程之間切換聚合所花費(fèi)的時間可能會成為一個重要問題。這就是為什么盡可能使用非阻塞調(diào)用來確保異步處理的原因。
二、Node與 PHP:服務(wù)器端開發(fā)語言環(huán)境
Node.js 和 PHP 通常被認(rèn)為是最適合服務(wù)器端軟件開發(fā)的兩種最理想的語言。本節(jié)將使用案例進(jìn)行演示,以了解 Node.js 和 PHP 的配置文件。
Node.js
Node.js由 Ryan Dahl 開發(fā)并于 2009 年 5 月發(fā)布。它是一個開源運(yùn)行時環(huán)境,從一開始就具有成本效益。Node.js支持異步開發(fā),這意味著它利用非阻塞系統(tǒng)調(diào)用使開發(fā)過程資源充沛。使用 Node.js 的最顯著優(yōu)勢之一是,由于只使用JavaScript,所以整個項(xiàng)目可以在開發(fā)時間線中僅使用一種語言。運(yùn)行時還附帶了幾個Node.js 框架,用于添加功能。
PHP
PHP代表超文本預(yù)處理器。它于 1994 年由拉斯穆斯·勒多夫 (Rasmus Lerdorf) 發(fā)布。雖然與 Node.js 相比,它是一種較舊的語言,但 PHP 可用于整個項(xiàng)目的服務(wù)器端開發(fā)和其他開發(fā)過程。由于它可以與JavaScript、HTML、CSS 和純文本一起使用,因此它在支持的底層語言方面的約束性較少。
市場趨勢
應(yīng)評估兩種備選方案的受歡迎程度以了解:
• 人才的供應(yīng)有助于項(xiàng)目的開發(fā)和維護(hù)。
• 與備選方案相關(guān)的社區(qū)和圖書館提供的支持。
• 可比項(xiàng)目中常用的替代方案。這些項(xiàng)目自完成上線以來,它們已經(jīng)承擔(dān)了迭代的成本。
此信息可用作評判標(biāo)準(zhǔn),以決定對于 Web 開發(fā)公司來說,Node.js 和 PHP 之間哪個可能是更佳選擇。
三、了解 Node.js 和 PHP 在服務(wù)器端開發(fā)中的對比
為了更好地構(gòu)建 Node.js 和 PHP 之間的分析框架,應(yīng)該查看并發(fā)性、可擴(kuò)展性和性能等特定標(biāo)準(zhǔn)。Node.js 和 PHP 都易于安裝,并隨其框架或包管理系統(tǒng)一起提供。因此,比較安裝過程在這里并不是最重要的。
1.并發(fā)性
并發(fā)性顯示了服務(wù)器端語言或運(yùn)行時高效執(zhí)行多個線程和進(jìn)程的效率。PHP 是一種同步語言,使用 I/O 塊調(diào)用。雖然一些依賴于 PHP 的插件和工具具有異步執(zhí)行,但是占比很少。雖然 PHP 庫已經(jīng)針對更快的性能和更少的計算資源消耗進(jìn)行了優(yōu)化,但不得不承認(rèn),由于是同步的原因,速度則會相對較慢。
Node.js 是一個異步環(huán)境。這意味著當(dāng)系統(tǒng)調(diào)用到達(dá)內(nèi)核時,查詢被解析。所有需要更多數(shù)據(jù)、文件或系統(tǒng)訪問權(quán)限的調(diào)用都會排隊(duì)并稍后執(zhí)行,而不會妨礙其他可以完成的功能。這是對異步環(huán)境的簡單解釋,但它仍然準(zhǔn)確地說明了該現(xiàn)象的核心含義。
2. 可擴(kuò)展性
可擴(kuò)展性表明了隨著項(xiàng)目功能和數(shù)據(jù)數(shù)量以及用戶數(shù)量方面的增長,服務(wù)器端腳本語言或運(yùn)行時環(huán)境可以跨多個系統(tǒng)、核心和服務(wù)器進(jìn)行擴(kuò)展。
大多數(shù)主要的內(nèi)容管理系統(tǒng)(如 WordPress 和 Joomla)都支持 PHP。這使得縮放過程相對更簡單。另一方面,Node.j在跨系統(tǒng)擴(kuò)展時需要付出相對更多的努力。
3. 性能
Node.js 是一個性能更好的運(yùn)行時環(huán)境,因?yàn)樗钱惒降模?ReactPHP 可以填補(bǔ) PHP 和 Node.js 之間的性能差距。
根據(jù)經(jīng)驗(yàn),與 Node.js 相比,PHP 每秒只能執(zhí)行 50% 的查詢。
4. 使用 PHP 或 Node.js 的理想場景
如果項(xiàng)目需要速度或?qū)崟r數(shù)據(jù)流,Node.js 將是兩種服務(wù)器端語言之間的首選選項(xiàng)。對于想要在整個堆棧中使用 JavaScript 的團(tuán)隊(duì)來說,Node.js 也是一個很好的替代方案。
當(dāng)希望項(xiàng)目具有可移植性時,PHP 是理想的選擇。當(dāng)已擁有集中式服務(wù)器基礎(chǔ)架構(gòu)時,它也是一個不錯的選擇。
四、對比分析
| Node.js | PHP |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
五、總結(jié)
Node.js 開發(fā)公司可能更喜歡運(yùn)行時環(huán)境,而那些精通 PHP 的公司則更喜歡服務(wù)器端腳本語言。使用更客觀的方法,可以看出項(xiàng)目的理想語言或運(yùn)行時環(huán)境將取決于項(xiàng)目的目的和約束。雙方都有大公司——Facebook、維基百科、Slack、MailChimp 和 WordPress 使用 PHP,而 Netflix、LinkedIn、PayPal 和 NASA 使用 Node.js。
因此,您不應(yīng)該比較哪種服務(wù)器端JavaScript語言總體上是好的,而應(yīng)該嘗試檢查這兩種語言中的哪一種適合您的特定項(xiàng)目、目標(biāo)和約束
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】
























