ホームページ  >  記事  >  バックエンド開発  >  PHP と Nodejs の詳細なディスカッション

PHP と Nodejs の詳細なディスカッション

WBOY
WBOYオリジナル
2016-08-08 09:20:54859ブラウズ

インターネットは急速な発展の時代にあります。サーバーサイドの開発者は、言語の選択に関して非常に混乱します。C、Java、Perl などの長い間主流の言語だけでなく、Ruby などの Web 開発に重点を置いた言語もあります。 、Clojure、Go。プロジェクトが順調に進んでいる限り、あなたの選択はそれほど重要ではないようです。

しかし、これらの新しい Web 開発者に正しい選択をさせるにはどうすればよいでしょうか?

私は PHP と NodeJ の 2 つの陣営の間で戦争を始めたくないので、現場でこれら 2 つの言語の開発状況を比較します。 Rasmus Lerdorf は 1994 年に PHP を作成しました。これは、Web サーバー (Apache、Ngix) にインストールされたコンポーネントによって実行されます。 PHP コードは HTML と混合できます。 初心者は、あまり練習しなくても価値のあるコードをすぐに書くことができます。これにより PHP の人気はますます高まり、現在では世界中のサーバーの 80% で PHP が実行されています。 WordPress は、世界の Web サイトの 4 分の 1 で使用されているコンテンツ管理システムで、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 を比較しました:

まず第一に、それらを比較する価値があります。どちらもオープンソースであり、どちらも Web 開発専用であり、同様のプロジェクトに使用できます。

PHP は長い間リリースされてきましたが、Node.js は登場したばかりで、ますます注目を集めています。 PHP プログラマーは Node.js のプロパガンダを信じるべきでしょうか?言語を切り替えることを検討する必要がありますか?
  1. 私はプログラミング言語を知っていて大好きです。1990 年代から PHP と JavaScript を使用しており、Node.js についても数年の経験があります。また、他の技術にも手を出しましたが、ここでは客観的な評価はできません。
  2. また、私がどれだけ多くの言語を比較したかは問題ではありません。なぜなら、私が彼らの言語について言及しなかったことに文句を言う人がどこかに必ずいるからです。
  3. SitePoint での競争

プログラマーは、自分のプログラミング スキルの向上に多くの時間を費やしています。複数のプログラミング言語を拡張する能力を持つ人もいますが、より高いレベルに到達した人は、多くの要素に基づいて独自の選択を行います。主観的には、技術的な決定を前進させ、擁護することになります。

SitePoint Smackdowns は、「自分にとって何が正しいかを選択する」という視点を持っていません。個人的な経験、要件、好みに基づいて推奨事項を作成します。私の言うことすべてに同意できないかもしれませんが、それは問題ではありません。重要なのは、あなたの意見が他の人がより情報に基づいた選択をするのに役立つということです。

評価方法

以下はPHPとNode.jsの10ラウンドの比較になります。各ラウンドでは、あらゆる Web テクノロジーに適用できる一般的な開発の課題を検討します。あまり詳しくは説明しませんが、乱数ジェネレーターや配列のソートの値を気にする人はほとんどいません。

最も多くのラウンドに勝った人が勝者となります。準備はできたか?戦いを始めましょう。 。 。 。 。 。

ラウンド 1: はじめに

「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 ラウンドで勝利し、1 ラウンドは引き分けでした。どちらかに偏るだろうと思っていましたが、思ったより緩やかでした。

Node.js は少し学習曲線があり、初心者には理想的ではありませんが、この対決では彼女が勝利しました。また、あなたがこの言語を好むしっかりとした JavaScript プログラマーであれば、Node.js はあなたを失望させることはありません。より最新であり、独自の Web 開発エクスペリエンスを提供するため、PHP を見逃すことはありません。

しかし、PHP を軽視しないでください。PHP は依然として不可欠であり、Node.js の方が速い、新しい、またはトレンドであるという理由だけで Node.js のトレンドに従うべきではありません。 PHP は習得が簡単でありながら、プロのプログラミング スキルをサポートしており、ヘルプがどこにでもあり、開発が簡単です。熱心な Node.js 開発者であっても、単純な Web サイトやアプリケーションには PHP の使用を検討する必要があります。

私のアドバイスは、オプションを評価し、ニーズに基づいて言語を選択することです。これは、この記事のような「比較」記事よりもはるかに信頼できます。

上記では、PHP と Nodejs についてあらゆる側面を含めて詳細に説明しましたが、PHP チュートリアルに興味のある友人にとって役立つことを願っています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。