ネットワークは急速な発展の時代にあります。サーバーサイド開発者は、言語の選択に関して非常に混乱します。C、Java、Perl などの長い間主流の言語だけでなく、Ruby、Clojure、じゃ、行け。プロジェクトが順調に進んでいる限り、あなたの選択はそれほど重要ではないようです。
しかし、これらの新しい Web 開発者に正しい選択をさせるにはどうすればよいでしょうか?
PHP と NodeJ の 2 つの陣営の間で戦争を始めるつもりはありません。これら 2 つの言語の開発状況を比較します。
PHP
ラスムス・レルドルフは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 を比較しました:
PHP は長い間リリースされてきましたが、Node.js は登場したばかりで、ますます注目を集めています。 PHP プログラマーは Node.js のプロパガンダを信じるべきでしょうか?言語を切り替えることを検討する必要がありますか?
私はプログラミング言語を理解しており、大好きです。1990 年代から PHP と JavaScript を使用しており、Node.js についても数年の経験があります。また、他の技術にも手を出しましたが、ここでは客観的な評価はできません。
また、私がどれだけ多くの言語を比較したとしても、私が自分たちの言語について言及しなかったことに文句を言う人は必ずどこかにいるでしょうから、問題ではありません。
SitePoint でのコンテスト
SitePoint Smackdowns は、「友人よ、自分にとって正しいものを選択する」という視点を採用しません。個人的な経験、要件、好みに基づいて推奨事項を作成します。私の言うことすべてに同意できないかもしれませんが、それは問題ではありません。重要なのは、あなたの意見が他の人がより情報に基づいた選択をするのに役立つということです。
評価方法
最も多くのラウンドに勝利した人が勝者となります。準備はできたか?戦いを始めましょう。 。 。 。 。 。
第1ラウンド: 開始
リーリー
このコードは、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 胜。理由如下:
JavaScript 是世界上最难理解的语言 — 但是,当哪天你顿悟以后,概念一通,就会发现其他语言都太过笨拙了。
JavaScript 代码比 PHP 简洁。例如,你再不需要跟 JSON 转来转去—— UTF-8 也不用
全栈工程师可以同时在客户端与服务端使用 JavaScript 。大脑不需要来回切换。
深入理解 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 はこの点で優れており、長年にわたって使用されており、その拡張機能により、主流の API やあまり普及していない API を使用してサーバーと直接通信することができます。
Node.js は追いつきつつありますが、古くて不人気なテクノロジーの成熟した統合コンポーネントを探すのは頭が痛いかもしれません。
第 7 ラウンド: ホスティングと展開
素晴らしい新しいアプリケーションをオンライン Web サーバーにデプロイするのはどのくらい簡単ですか?これも PHP にとって大きな勝利です。ランダムな Web ホスティング会社に連絡すると、主に PHP のサポートが見つかり、場合によっては MySQL も無料でサポートされます。サンドボックス化の場合、PHP はより単純であると考えられており、危険な拡張機能は無効にすることができます。
Node.js は別の獣であり、サーバーサイド アプリケーションは永久に実行されます。物理/仮想/クラウド、またはカスタム サーバー環境が必要で、できれば root アクセスが必要ですが、一部のサーバー、特に共有サーバーにはアクセスできず、サーバー全体がダウンする危険があります。
Node.js のホスティングは簡単になりますが、PHP ファイルをアップロードするのに FTP ほど便利になることはないと思います。
ラウンド 8: パフォーマンス
PHP は非常に働きやすく、より高速に実行するためのプロジェクトやオプションがたくさんあります。パフォーマンスを重視する PHP 開発者でも速度を気にすることはほとんどありませんが、一般に Node.js のパフォーマンスの方が優れています。 もちろん、パフォーマンスは開発チームの経験と献身に大きく依存しますが、それでも Node.js には次の利点があります:
依存関係が少ない
PHP アプリケーションへのすべてのリクエストは、PHP インタープリターを起動して PHP コードを実行するために、WEB サーバー経由でルーティングされる必要があります。 Node.js はこれらの依存関係を必要とせず、基本的に Express などのサーバーとフレームワークを使用します。これは非常に軽量で、アプリケーションの優れた部分を果たします。
より小型で高速なインタープリター
Node.js のインタープリターは、PHP のインタープリターよりも小さく、より柔軟です。 古いバージョンの言語とのレガシー互換性の問題によって妨げられることはなく、Google は V8 エンジンのパフォーマンスを向上させるために多大な努力を払ってきました。
申請は常にオンラインです
PHP は標準のクライアントサーバーモデルに従います。 各ページ要求によりアプリケーションが初期化され、構成パラメータが読み取られ、データベースに接続され、情報が読み取られて、HTML がレンダリングされます。 Node.js アプリケーションは永続的に実行され、起動する必要があるのは 1 回だけです。たとえば、単一のデータ接続オブジェクトを作成し、それをすべてのリクエストに対して再利用できます。 PHP にも Memcached の使用など、いくつかの実装方法があることが認識されていますが、これは言語の標準機能ではなくなりました。
イベント駆動型のノンブロッキング I/O
PHP は、他のほとんどのサーバーサイド言語と同様に、ブロッキング実行モデルを使用します。 データベースからデータを取得するなどのコマンドを実行する場合、次の内容が実行される前にコマンドが実行されるまで待つ必要があります。 Node.js は通常、待機しません。 代わりに、命令の実行時に一度呼び出されるコールバック関数を提供する必要があります。例:
この例では、すべてのデータが返されたときに process 関数が呼び出されるため、コンソールは最初に「終了」を出力し、次に「N レコードが返されました」と出力します。 言い換えれば、インタプリタは他のプロセスが処理している間に他のことを行うことができます。
状況はより複雑で、いくつかの警告があることに注意してください:
Node.js/JavaScript は単一スレッドでのみ実行できますが、ほとんどの Web サーバーはマルチスレッドであり、リクエストを同時に処理します。
あるユーザーの JavaScript 処理が長時間実行されると、タスクが分割されるか Web ワーカーが使用されない限り、他のユーザーのコードが実行されなくなります。
ベンチマークは主観的であり、欠陥があります。Node.js の方が優れている例や、PHP の方が優れている比較例がいくつかあります。プログラマーはただ自分たちの信念を証明しようとしているだけなのです。
非同期イベント駆動型コードの作成は非常に複雑で困難です。
私の経験からしか言えません。私の Node.js アプリケーションは、同等の PHP アプリケーションよりも大幅に高速です。あなたはそうではないかもしれませんが、試してみなければ決してわかりません。
ラウンド 9: 開発者の情熱
これは「一般的な Web 開発の課題」という目標を超えることになりますが、重要です。毎日コードを書くのが怖いなら、どの言語が優れているかは関係ありません。
比較するのは難しいですが、PHP 開発者の中にはこの言語に非常に情熱を注ぐ人もいます。最後に PHP の記事やスライドショーを読んで感動したのはいつですか?もしかしたら、これ以上言う必要はないのではないでしょうか?露出が低いかも?それとも、私が正しい場所を探していないのでしょうか? PHP7 にはいくつかの新機能がありますが、このテクノロジーは何年も行き詰まっており、それにもかかわらず、PHP について不満を言う開発者はほとんどいません。
JavaScript はコミュニティを二分しており、それを好む人もいれば嫌う人もいます。それにもかかわらず、Node.js に関するフィードバックは、嵐の真っただ中にあることもあり、ほとんどが肯定的です。非常に新しいので、賞賛は続かないかもしれません。現時点では、Node.js がこのラウンドに勝ちます。
ラウンド10: 展望
どのサーバー言語を使用するかは問題ではありません。たとえ更新されなくなっても、引き続き動作します (やったー、ColdFusion!) 使用状況は安定しつつありますが、多くの人が依然として PHP を使用し続けることを私は保証します。 20年間しっかりと働きます。
Node.js は、ネットワーク ソケットやサーバー側の送信イベントなど、HTML5 の革新的な機能をサポートしながら、クライアント側の開発と同じ構文を使用する最新の開発方法を提供し、急速に台頭しています。 Node.js 言語のフォーク機能についてはいくつかの論争がありましたが、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 の使用を検討する必要があります。
私のアドバイスは、オプションを評価し、ニーズに基づいて言語を選択することです。これは、この記事のような「比較」記事よりもはるかに信頼性があります。
以上がこの記事の全内容です。皆さんに気に入っていただければ幸いです。