自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Node.js 與 PHP:理解服務(wù)器端開發(fā)

譯文
開發(fā) 前端
了解 Node.js 和 PHP 這兩種重要的服務(wù)器端軟件開發(fā)語言,以確定哪一種最適合您的項(xiàng)目。

【51CTO.com快譯】選擇合適的語言、框架、庫和數(shù)據(jù)庫工具包是成功執(zhí)行項(xiàng)目的第一步。雖然了解每個(gè)工具的優(yōu)缺點(diǎn)是執(zhí)行這種比較分析的合理途徑,但如果前端和后端開發(fā)團(tuán)隊(duì)了解適當(dāng)?shù)毓ぞ?,工作效率?huì)大大很多。

服務(wù)器端開發(fā)對(duì)于設(shè)計(jì)基于web的功能性和流動(dòng)性產(chǎn)品(網(wǎng)站、應(yīng)用程序或原生web應(yīng)用程序)至關(guān)重要??蛻舳碎_發(fā)涉及用戶體驗(yàn)和信息的布局方式。服務(wù)器端開發(fā)負(fù)責(zé)高效組織和訪問存儲(chǔ)在數(shù)據(jù)庫和 Web 應(yīng)用程序中的數(shù)據(jù),使用靜態(tài)資源(如 CSS 和 JavaScript 或 HTML 模板)甚至數(shù)據(jù)進(jìn)行訪問。

因此,在為開發(fā)下一個(gè)項(xiàng)目時(shí),了解服務(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)核提供請(qǐng)求,內(nèi)核在設(shè)備級(jí)別執(zhí)行這些請(qǐng)求。這種安排確保所有特定于設(shè)備的計(jì)算都在內(nèi)核級(jí)別完成,并且應(yīng)用程序不必處理過多的計(jì)算負(fù)載。

2. 阻塞與非阻塞調(diào)用

系統(tǒng)調(diào)用通常被確定為阻塞調(diào)用。“阻塞”是指內(nèi)核等待返回結(jié)果或信息的時(shí)間。例如,內(nèi)核可能會(huì)等待設(shè)備準(zhǔn)備好進(jìn)行計(jì)算,或等待訪問某些設(shè)備數(shù)據(jù)等。這些挑戰(zhàn)會(huì)導(dǎo)致阻塞調(diào)用,就意味著指令在幾毫秒內(nèi)不會(huì)執(zhí)行完畢。

非阻塞調(diào)用對(duì)工程師來說更復(fù)雜,但可以節(jié)省關(guān)鍵的計(jì)算資源。對(duì)于這種安排,可以命令內(nèi)核在必要的數(shù)據(jù)可用時(shí)發(fā)出警報(bào),同時(shí)將請(qǐng)求放入隊(duì)列中。其他可以立即執(zhí)行的功能會(huì)立即執(zhí)行。

3. 調(diào)度

如果正在創(chuàng)建一個(gè)全面的產(chǎn)品,在某些時(shí)候,線程和進(jìn)程的數(shù)量將達(dá)到臨界質(zhì)量,將不得不為調(diào)度提供更多的考慮。用最簡單的術(shù)語來說,調(diào)度是上下程序切換,允許一個(gè)線程接著一個(gè)線程或一個(gè)進(jìn)程接著一個(gè)進(jìn)程執(zhí)行的步驟。

如果有太多的阻塞調(diào)用,那么在數(shù)千個(gè)線程和進(jìn)程之間切換聚合所花費(fèi)的時(shí)間可能會(huì)成為一個(gè)重要問題。這就是為什么盡可能使用非阻塞調(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ā)布。它是一個(gè)開源運(yùn)行時(shí)環(huán)境,從一開始就具有成本效益。Node.js支持異步開發(fā),這意味著它利用非阻塞系統(tǒng)調(diào)用使開發(fā)過程資源充沛。使用 Node.js 的最顯著優(yōu)勢(shì)之一是,由于只使用JavaScript,所以整個(gè)項(xiàng)目可以在開發(fā)時(shí)間線中僅使用一種語言。運(yùn)行時(shí)還附帶了幾個(gè)Node.js 框架,用于添加功能。

PHP

PHP代表超文本預(yù)處理器。它于 1994 年由拉斯穆斯·勒多夫 (Rasmus Lerdorf) 發(fā)布。雖然與 Node.js 相比,它是一種較舊的語言,但 PHP 可用于整個(gè)項(xiàng)目的服務(wù)器端開發(fā)和其他開發(fā)過程。由于它可以與JavaScript、HTML、CSS 和純文本一起使用,因此它在支持的底層語言方面的約束性較少。

市場(chǎng)趨勢(shì)

應(yīng)評(píng)估兩種備選方案的受歡迎程度以了解:

• 人才的供應(yīng)有助于項(xiàng)目的開發(fā)和維護(hù)。

• 與備選方案相關(guān)的社區(qū)和圖書館提供的支持。

• 可比項(xiàng)目中常用的替代方案。這些項(xiàng)目自完成上線以來,它們已經(jīng)承擔(dān)了迭代的成本。

此信息可用作評(píng)判標(biāo)準(zhǔn),以決定對(duì)于 Web 開發(fā)公司來說,Node.js 和 PHP 之間哪個(gè)可能是更佳選擇。

三、了解 Node.js 和 PHP 在服務(wù)器端開發(fā)中的對(duì)比

為了更好地構(gòu)建 Node.js 和 PHP 之間的分析框架,應(yīng)該查看并發(fā)性、可擴(kuò)展性和性能等特定標(biāo)準(zhǔn)。Node.js 和 PHP 都易于安裝,并隨其框架或包管理系統(tǒng)一起提供。因此,比較安裝過程在這里并不是最重要的。

1.并發(fā)性

并發(fā)性顯示了服務(wù)器端語言或運(yùn)行時(shí)高效執(zhí)行多個(gè)線程和進(jìn)程的效率。PHP 是一種同步語言,使用 I/O 塊調(diào)用。雖然一些依賴于 PHP 的插件和工具具有異步執(zhí)行,但是占比很少。雖然 PHP 庫已經(jīng)針對(duì)更快的性能和更少的計(jì)算資源消耗進(jìn)行了優(yōu)化,但不得不承認(rèn),由于是同步的原因,速度則會(huì)相對(duì)較慢。

Node.js 是一個(gè)異步環(huán)境。這意味著當(dāng)系統(tǒng)調(diào)用到達(dá)內(nèi)核時(shí),查詢被解析。所有需要更多數(shù)據(jù)、文件或系統(tǒng)訪問權(quán)限的調(diào)用都會(huì)排隊(duì)并稍后執(zhí)行,而不會(huì)妨礙其他可以完成的功能。這是對(duì)異步環(huán)境的簡單解釋,但它仍然準(zhǔn)確地說明了該現(xiàn)象的核心含義。

2. 可擴(kuò)展性

可擴(kuò)展性表明了隨著項(xiàng)目功能和數(shù)據(jù)數(shù)量以及用戶數(shù)量方面的增長,服務(wù)器端腳本語言或運(yùn)行時(shí)環(huán)境可以跨多個(gè)系統(tǒng)、核心和服務(wù)器進(jìn)行擴(kuò)展。


大多數(shù)主要的內(nèi)容管理系統(tǒng)(如 WordPress 和 Joomla)都支持 PHP。這使得縮放過程相對(duì)更簡單。另一方面,Node.j在跨系統(tǒng)擴(kuò)展時(shí)需要付出相對(duì)更多的努力。

3. 性能

Node.js 是一個(gè)性能更好的運(yùn)行時(shí)環(huán)境,因?yàn)樗钱惒降?,?ReactPHP 可以填補(bǔ) PHP 和 Node.js 之間的性能差距。
根據(jù)經(jīng)驗(yàn),與 Node.js 相比,PHP 每秒只能執(zhí)行 50% 的查詢。

4. 使用 PHP 或 Node.js 的理想場(chǎng)景

如果項(xiàng)目需要速度或?qū)崟r(shí)數(shù)據(jù)流,Node.js 將是兩種服務(wù)器端語言之間的首選選項(xiàng)。對(duì)于想要在整個(gè)堆棧中使用 JavaScript 的團(tuán)隊(duì)來說,Node.js 也是一個(gè)很好的替代方案。

當(dāng)希望項(xiàng)目具有可移植性時(shí),PHP 是理想的選擇。當(dāng)已擁有集中式服務(wù)器基礎(chǔ)架構(gòu)時(shí),它也是一個(gè)不錯(cuò)的選擇。

四、對(duì)比分析

Node.js PHP
  • 開源運(yùn)行時(shí)環(huán)境
  • 開源服務(wù)器端語言
  • 在 JavaScript 上運(yùn)行
  • 在 JavaScript、HTML、CSS 和純文本上運(yùn)行
  • 被全球 189,000 個(gè)網(wǎng)站使用
  • 全球超過 500 萬個(gè)網(wǎng)站使用 
  • 異步調(diào)用執(zhí)行可以提高效率
  • 通常,同步調(diào)用執(zhí)行會(huì)導(dǎo)致更多的資源消耗
  • 難以擴(kuò)展
  • 在 WordPerss 和 Joomla 的幫助下,可擴(kuò)展性非常強(qiáng)
  • 估計(jì)每秒請(qǐng)求數(shù):3,614
  • 估計(jì)每秒請(qǐng)求數(shù):1,773
  • 非常適合需要速度、實(shí)時(shí)數(shù)據(jù)流以及希望在整個(gè)開發(fā)階段使用 JavaScript 的項(xiàng)目
  • 非常適合于必須具有可移植且使用集中式服務(wù)器基礎(chǔ)架構(gòu)開發(fā)的項(xiàng)目 

五、總結(jié)

Node.js 開發(fā)公司可能更喜歡運(yùn)行時(shí)環(huán)境,而那些精通 PHP 的公司則更喜歡服務(wù)器端腳本語言。使用更客觀的方法,可以看出項(xiàng)目的理想語言或運(yùn)行時(shí)環(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)載請(qǐng)注明原文譯者和出處為51CTO.com】

 

責(zé)任編輯:梁菲 來源: DZone
相關(guān)推薦

2011-07-26 11:07:08

JavaScript

2011-09-08 10:21:50

Node.js

2021-05-26 09:00:00

Node.js開發(fā)模塊

2020-10-12 08:06:28

HTTP 服務(wù)器證書

2013-11-01 09:34:56

Node.js技術(shù)

2010-10-15 08:57:15

PHP多進(jìn)程

2018-07-09 10:01:56

2019-02-15 10:49:37

Node.jsweb服務(wù)器

2018-04-22 00:01:43

JavaScript Node 語言

2011-06-07 16:01:46

Android 服務(wù)器 數(shù)據(jù)交互

2018-03-15 09:54:45

php服務(wù)器端語言

2019-01-22 15:28:04

Javascriptvue.jsnuxt.js

2011-10-19 14:38:46

Node.js

2015-03-10 10:59:18

Node.js開發(fā)指南基礎(chǔ)介紹

2010-09-08 14:03:39

ZendPHP許可選擇

2011-06-17 10:29:04

Nodejavascript

2022-06-05 13:52:32

Node.jsDNS 的原理DNS 服務(wù)器

2015-07-16 09:59:55

PHP Node.js討論

2012-05-02 15:56:20

PHP

2012-10-15 13:40:15

IBMdw
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)