首頁 後端開發 php教程 PHP 與 Nodejs

PHP 與 Nodejs

Aug 08, 2016 am 09:20 AM
javascript js nbsp node php

網路正處於一個日新月異的發展時代。伺服器端開發人員在選擇語言的時候非常困惑,有長期主導的語言,例如C、Java和Perl,也有專注於web開發的語言,例如Ruby、Clojure和Go。只要你的專案運作良好,你的選擇就顯得沒有那麼重要了。

  但是如何讓這些新的web開發人員做出一個正確的選擇呢?

  我不希望展開一場PHP、NodeJs兩大陣營之間的戰爭,我將會對比這兩種語言所在領域的發展狀況:

  • PHP
    Rasmus Lerdorf在1994年創造了PHP。它是由安裝在web伺服器(Apache、Ngix)上的元件運行的。

    PHP程式碼可以和HTML混合到一塊。 對於初學者就能很快寫出很有價值的程式碼,這並不需要太多的練習。 這讓PHP變得越來越流行, 現在全球百分之八十的伺服器上都在運行著PHP。全球四分之一的網站都在使用的一個內容管理系統--WordPress,就是用PHP寫的。

  • Node.js
    Ryan Dahl在2009年創造了Node.js。它是基於Google的V8 JavaScript解釋引擎(在Chrome瀏覽器裡它負責執行客戶端的JavaScript程式碼)。與其它語言不同的是Node.js內建了處理網路請求和回應的函式庫,所以你不需要單獨的伺服器(Apache、Ngix)或其他依賴。

    Node.js雖然很新但是很快就獲得了極大的追捧。在很多的大公司都有在使用,例如:Microsoft,Yahoo,LinkedIn和PayPal。

  我們所鍾愛的C#、Java、Ruby、Python、Perl、Erlang、C++、Go、Dart、Scala、Haskell等等,它們呢?

  如果文章裡邊比較瞭如上所有語言的各種參數,文章將會非常長,你還會讀它麼?你期望一個程式設計師了解所有的程式開發語言嗎?這顯然是不可能的。我主要對PHP和Node.js做了比較,主要原因如下:

  1. 首先它們之間值得比較。兩者都是開放原始碼,都是致力於web開發,並且都可用於相似的專案。

  2. PHP已經發布了很久了,但是Node.js才剛剛興起,並且受到越來越多的關注。難道PHP的程式設計師應該相信Node.js的宣傳?應該考慮轉換語言?

  3. 我了解,熱愛程式語言,自從20世紀90年代之後我就一直使用PHP和JavaScript,並且也有幾年的Node.js的經驗。除此之外我也涉獵了其他的技術,但是在這裡我還不能對他們做出客觀評價。

  另外,對多少語言做比較不重要,因為總會有某些地方的某些人抱怨我沒有提到他們語言。 

  SitePoint上的角逐

  程式設計師會花很多時間來提升自己的程式設計能力。有些人有程式語言之間的延伸能力,但是這些達到更高層次的人會根據許多的因素來做出自己的選擇。從主觀方面來說,你將會推進並捍衛你的技術決策。

  SitePoint Smackdowns並沒有採取「選擇適合你自己的,朋友」這樣的觀點。我將會根據個人的經驗、要求和喜好提出建議。你可能不會同意所有的我所說的所有觀點,這並不重要,重要的是你的意見將會給其他人做出更明智的選擇。

  評估方法

  下面將對 PHP 和 Node.js 進行十個輪次的比較。每個回合都會考慮可以應用到任意 web 技術的常見的開發挑戰。我們不會太深入討論細節;很少人會關心隨機數產生器或陣列排序的價值。

  贏得最多回合的將會是優勝者。準備好了嗎?開始較量吧。 。 。 。 。 。

  第一輪:起步

  創建一個「Hello World」 web 頁面有多快呢?在 PHP 中:

<?php
    echo 'Hello World!';
?>
登入後複製

  這段程式碼可以放置在可以被 PHP 引擎解析的任意檔案中--通常,是以 .php 為後綴的檔案。在瀏覽器中輸入 URL 跳到檔案即可。

  不可否認,這不是全部。這段程式碼只能運行於安裝了 PHP 的 web 伺服器(PHP 有一個內建的伺服器,儘管如此,最好還是使用更健壯的伺服器)。大多數作業系統提供了伺服器軟體,如 windows 上的 IIS,Mac 和 Linux 上的 Apache,儘管它們需要啟動和設定。通常使用預先建置的安裝程序,如 XAMPP或虛擬機器鏡像(如 Vagrant)。更簡單的方式:上傳你的檔案到任意的 web 主機。

  對比而言,安裝 Node.js 輕而易舉。你可以 下載安裝程式 或 使用套件管理器。 接下來讓我們在 hello.js 中建立 web 頁面:

var http = require('http');
http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World!');
}).listen(3000, '127.0.0.1');
登入後複製

  在浏览器中访问 http://127.0.0.1:3000/  之前,你需要在终端输入 node hello.js 来启动应用程序 。通过上面的五行代码,我们已经创建了一个小型的 web 服务器,尽管这很令人吃惊,但是即便拥有很强客户端 JavaScript 经验的人也很难理解。

  PHP 在概念上更简单所以赢得本轮。稍微懂得一些 PHP 声明的人就可以开发一些有用的东西。PHP 有更多的软件依赖,但是 PHP 的概念对于新手来说不那么繁琐。

  懂一些 JavaScript 和开发 Node.js 应用是两回事儿,Node.js 开发方法和大多数服务端技术不同,你需要先弄明白一些相当复杂的概念,比如关闭和回调函数。

  第二轮:帮助和支持

  没有官方文档和资源(课程,论坛,堆栈溢出)的帮助你必将举步维艰。 PHP 在本轮轻易胜出,她有大量的指南和二十年的 Q&A。无论你想做什么,总会有人在你之前已经面对过同样的问题。

  Node.js 拥有很好的文档,但是更加年轻,能提供的帮助较 PHP 也少。JavaScript 在市面上的时间和 PHP 一样久,但是主要的帮助都是针对浏览器开发的,那基本没啥帮助。

  第三回合: 语言语法

  声明与结构是不是符合逻辑而且简单好用?

  不像一些语言跟框架,PHP 不会限制你按特定的方式编写,具体怎么搞随你。你可以从几行的程序开始,然后添加些方法,进而写一些简单的 PHP4 模式的对象,最后编写优雅的面向对象的 MVC 模式 PHP5+ 的应用。你的代码开始可能比较混乱,但也能工作,而且会随着理解的深入越写越好。

  PHP 的语法在版本间可能略有调整,但是向后兼容一般都做得很好。但不幸的是,这也导致了一个问题:PHP 很混乱。例如,怎么统计一个字符串中字符的个数?是 count?str_len? 还是 strlen?亦或 mb_strlen?PHP 有数以百记的函数,而且命名规则也也不完全一致。可以试试不查文档写几行代码。

  JavaScript 相对就简单些,只有几十个核心声明。不过语法就经常被开发者喷了,因为它的原型化对象模型看起来平易近人,实际上却不是。而且各种数学错误(0.1+0.2 != 0.3)以及类型转换的混乱('4' + 2 == '42' 和 '4' - 2 == 2)也招致不少抱怨,但这些情况世界很少导致什么问题,多数语言都有这种借口。

  PHP 有他的优点,但是这回合我判 Node.js 胜。理由如下:

  1. JavaScript 是世界上最难理解的语言 — 但是,当哪天你顿悟以后,概念一通,就会发现其他语言都太过笨拙了。

  2. JavaScript 代码比 PHP 简洁。例如,你再不需要跟 JSON 转来转去—— UTF-8 也不用

  3. 全栈工程师可以同时在客户端与服务端使用 JavaScript 。大脑不需要来回切换。

  4. 深入理解 JavaScript 会让你更想用它,但是 PHP 不是这样。

  第四轮:开发工具

 两种技术都有一些很好的编辑器,集成开发环境,调试器,验证器和其他工具。我认为这是平局,但是这里有一些工具给 Node.js 些许优势:NPM-包管理器。 NPM 允许你安装和管理依赖,设置配置变量,定义脚本和其他。

  PHP 的 Composer 项目受 NPM 激发,在有些方面更强。但是,PHP 在默认情况想不提供,活动库较小,在社区的影响更小。

  Grunt 和 Gulp 之类革新了开发方法的构建工具的壮大,NPM 也有一部分功劳。有时候 PHP 开发者也许想要/需要安装 node.js,这不是倒退。

  第五轮:环境

  技术可以在哪使用和部署?支持哪些平台和生态系统?网页开发者经常需要开发一些并不完全针对网页的应用,比如构建工具,迁移工具,数据库转换脚本等。

  PHP 有办法开发桌面应用和命令行工具,但是你不会使用他们。本质上,PHP 是一个服务端技术,他很擅长该领域,但是很少延伸到这之外。

  若干年前,JavaScript 被认为限制很多,有一些边缘技术,但是他的主战场还是浏览器。Node.js 已经改变了这一感觉并井喷出了很多 JavaScript 项目,你可以在任何地方使用 JavaScript:浏览器,服务器,终端,桌面甚至嵌入式系统,这使得 JavaScript 无处不在。

  第六轮:集成

  开发技术很受限制,除非他们能与数据库和驱动集成。PHP 在这方面很强,PHP 面世已经很多年,他的扩展使他能和拥有主流或冷门的 API 的服务器直接通讯。

  Node.js 正在迎头直追,但是你也许会为某些老旧,冷门的技术寻找成熟集成组件而头疼。

  第七轮:托管和部署

  部署你绚丽新应用到在线网页服务器有多容易?这是 PHP 的另一次完胜。随机联系某个网页托管公司你可以找到对主要的 PHP 支持,也许还免费附送 MySQL。对于沙盒,PHP 被认为更简单,有风险的扩展可以被禁用。

  Node.js 是个不同的野兽,服务端的应用永远运行。你需要一台物理/虚拟/云或定制的服务器环境,最好有 root 权限,这对有些服务器来说遥不可及,特别是那些共享的服务器,你有可能让整台服务器宕机。

  Node.js 托管将会变得简单,但是我认为他永远没法像 FTP 上传一些 PHP 文件那么方便。

  第八轮:性能

  PHP 很勤快,有很多项目跟选项可以使它跑得更快。即使那些对性能要求很严苛的 PHP 开发者也几乎不会担心速度问题, 但是 Node.js 性能通常更好一些。 当然,性能很大程度上决定于开发团队的经验以及是否上心, 但是 Node.js 还是有如下几条优势的:

 更少的依赖

  所有对 PHP 应用的请求都必须经过一个 WEB 服务器的路由,来启动 PHP 的解释器运行 PHP 代码。Node.js 不需要这些依赖, 而且你基本一定会使用一个带服务器的框架,像 Express,他很轻量,很好的扮演你应用的一部分。

更小更快的解释器

  Node.js 的解释器比 PHP 的更小更灵活。 他并不受旧版语言遗留兼容问题的拖累,而且 Google 在 V8 引擎性能改善上出了大力。

应用永久在线

  PHP 遵循标准客户端-服务端模型。 每个页面请求都会初始化应用; 你读取配置参数、连接数据库、读取信息、渲染 HTML。Node.js 应用持久运行,只需要启动一次。例如,你可以创建一个单独数据连接对象,然后所求请求一起复用。公认的,PHP 也有一些途径来实现,比如使用 Memcached ,但是这已经不是语言的标准特性了。

  事件驱动,无阻塞 I/O

  PHP 跟其他多数服务端语言采用阻塞执行的模型。 当你执行一个命令,比如从数据库取数据,那么必须等这个指令执行完成后,才会执行下面的内容。 Node.js 通常不会等的。 取而代之的是, 你需要提供一个回调函数,这个函数当指令执行完后会被调用一次。例如:

// fetch records from a NoSQL database
DB.collection('test').find({}).toArray(process);
console.log('finished');
 
// process database information
function process(err, recs) {
    if (!err) {
        console.log(recs.length + ' records returned');
    }
}
登入後複製

  这个例子中, 控制台会先输出‘finished’,然后输出‘N records returned’,因为 process 函数是所有数据返回的时候才被调用的。 换句话说,当解释器在其它进程处理的时候可以干些别的事情。

  注意情况比较复杂,还有几个警告:

  • Node.js/JavaScript 只能在单线程上运行,但是大多数 web 服务器都是多线程,而且并发的处理请求。

  • 一个用户长时间运行的 JavaScript 处理会阻止其它用户的代码执行,除非拆分任务或者使用Web Workers。

  • 基准测试是主观的和有缺陷的;可以找到一些例子 Node.js 比较好,而一些相对的例子 PHP 比较好 。程序员只是在尝试证明他们的信仰!

  • 书写异步的事件驱动的代码非常复杂,非常有挑战性。

  我只能从我的经验来讲: 我的 Node.js 应用要明显比 PHP 的同等应用要快。你的可能不是,但是不试是永远不会知道的。

  第九轮:开发者激情

  这会超出”常见网页开发挑战“这样的目标,但是这很重要。如果你恐惧每天写代码,那你无所谓哪门语言更好。

  很难为此做出比较但是一些 PHP 开发者对 PHP 这门语言很有激情。你最近一次读到让你走心的 PHP 文章或幻灯片是什么时候?也许已无需再说?可能是更低的曝光度?或者我没找对地方?PHP7 有一些新的功能,但是该技术已经原地踏步很多年了,虽说如此,很少有开发人员对PHP发牢骚。

  JavaScript 分离了社区,有人爱也有人恨,一些程序员在中间犹豫不决,经管如此,对 Node.js 的反馈大多积极,她正处于风口浪尖,一部分原因是因为她很新,赞誉不一定持续。目前,Node.js 赢得本轮。

  第十轮:前景

  您选择采用哪种服务端语言并不重要;即使她不再被更新也会照样继续工作(yay ColdFusion!)尽管使用量上趋于稳定但是很多人依然使用 PHP,我打包票她还能再坚挺二十年。

  Node.js 崛起得很迅速,她提供了一種現代的開發方式,使用和客戶端開發一樣的語法同時支援 HTML5 變革式的特徵,例如網頁套接字和服務端發送事件。儘管大家對語言的分叉函數有些爭議,但是Node.js的使用量還是呈指數級成長。

  Node.js 勢必會蠶食 PHP 的市場份額,但我不認為她能完全取而代之。兩種技術都有光輝的未來。我宣布本輪平手。

  最終贏家

  最終分數:Node.js 贏得5輪,PHP 贏得4輪,一輪平手。以為會倒向其中一方,結果比我預想的更中庸一些。

  Node.js 有一定的學習曲線,對新手來說不夠理想但是她贏得了本次對決。而且,如果你是位喜歡該語言的可靠的 JavaScript 程式設計師,Node.js 不會讓你失望。她更新潮提供自己網頁開發的體驗,你不會思念 PHP。

  但不要貶低 PHP,PHP 依然有活力,你不該因為 Node.js 快一些,新一些或新潮一些就去緊跟 Node.js 潮流。 PHP 易學且依然支援專業的程式設計技巧,幫助無所不在而且開發簡單。甚至死忠的 Node.js 開發者也必須在簡單網站和應用程式時考慮使用 PHP。

  我的建議是:評估選項,根據你的需求來選擇一門語言,這比本文這樣的」對比「文章靠譜得多。

  原文網址:http://www.sitepoint.com/sitepoint-smackdown-php-vs-node-js/

以上就介紹了PHP vs Nodejs,包含了方面的內容,希望對PHP教學有興趣的朋友有幫助。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

Pi Node教學:什麼是Pi節點?如何安裝和設定Pi Node? Pi Node教學:什麼是Pi節點?如何安裝和設定Pi Node? Mar 05, 2025 pm 05:57 PM

PiNetwork節點詳解及安裝指南本文將詳細介紹PiNetwork生態系統中的關鍵角色——Pi節點,並提供安裝和配置的完整步驟。 Pi節點在PiNetwork區塊鏈測試網推出後,成為眾多先鋒積極參與測試的重要環節,為即將到來的主網發布做準備。如果您還不了解PiNetwork,請參考Pi幣是什麼?上市價格多少? Pi用途、挖礦及安全性分析。什麼是PiNetwork? PiNetwork項目始於2019年,擁有其專屬加密貨幣Pi幣。該項目旨在創建一個人人可參與

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

php程序在字符串中計數元音 php程序在字符串中計數元音 Feb 07, 2025 pm 12:12 PM

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

解釋PHP中的晚期靜態綁定(靜態::)。 解釋PHP中的晚期靜態綁定(靜態::)。 Apr 03, 2025 am 12:04 AM

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

您如何在PHP中解析和處理HTML/XML? 您如何在PHP中解析和處理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? 什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? Apr 03, 2025 am 12:03 AM

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

See all articles