Node.jsとPHP:開発者のマインドシェアをめぐる壮大な戦い

それは古典的なハリウッドの陰謀です:別々の道を進んだ2人の古い友人の間の戦い。多くの場合、摩擦は、一方の仲間が常にもう一方の仲間の口に出さない領域に興味を持ったときに始まります。この映画のプログラミング言語バージョンでは、仲間のフリックを恨みの一致に変えるのはNode.jsの導入です。PHPとJavaScriptは、かつてインターネットを一緒に支配していたが、現在は開発者のマインドシェアのためにそれを公にしています。

昔は、パートナーシップは単純でした。JavaScriptはブラウザの詳細をほとんど処理しませんでしたが、PHPはポート80とMySQLの間のすべてのサーバー側タスクを管理しました。それはインターネットの多くの重要な部分をサポートし続けている幸せな組合でした。WordPress、Drupal、Facebookの間で、人々はPHPに出くわさずにWeb上を移動することはほとんどできません。

その後、賢い子供が、サーバー上でJavaScriptを実行できることを発見しました。突然、次世代のサーバースタックを構築するためにPHPを使用する必要がなくなりました。Node.jsとクライアントで実行されるフレームワークを構築するために必要なのは1つの言語だけでした。「JavaScripteverywhere」がマントラになった人もいます。

その発見以来、JavaScriptは爆発的に普及しました。 Node.js開発者は、React、Vue、Express、Angular、Meteorなど、増え続ける優れたフレームワークとスキャフォールディングのコレクションから選択できるようになりました。リストは長く、最大の問題は優れたオプションから選択することです。

Node.jsのブームを、JavaScriptが決定的に勝利している証拠と見なす人もいます。その見方を強化するために、生データがたくさんあります。 GitHubは、JavaScriptがリポジトリのコレクションの中で最も人気のある言語であり、JavaScriptのキスのいとこであるTypeScriptも急速に成長していると報告しています。最もクールなプロジェクトの多くはJavaScriptで書かれており、最も人気のあるハッシュタグの多くはJavaScriptを参照しています。一方、PHPは、このランキングで3位から4位に下落しており、プレスリリース、製品の展開、およびその他の大規模なマーケティングの瞬間の数では、おそらくさらに下落しています。

しかし、誇大広告は薄れ、ソフトウェアは何十年も存続する可能性があります。 PHPコードベースのほとんどは移行されず、毎日読むテキストの大部分を提供し続けます。いくつかの見積もりによると、私たちが表示するページの40%は、何らかの形でPHPで始まります。これの一部は、PHPが生まれ変わっているためです。ここ数年で、PHPを実行しているシステムの根性は完全に書き直されました。それはあなたの祖父母のウェブサイトを実行したのと同じPHPコードではありません。

PHPの優れたジャストインタイムコンパイラは、Node.js革命を推進したのと同じスマートな手法のおかげで、これまでになく迅速に回答を提供しています。現在、PHP 7.2とHHVMは、V8がChromeとNode.jsにもたらしたのと同じ巧妙なオンザフライ最適化の多くを提供します。それだけでなく、HHVMにはHackがあります。これは、ラムダ、ジェネリック、コレクションなどの高度なプログラミング機能を完全にサポートする巧妙なPHP方言です。したがって、これらの機能が必要な場合は、よりフル機能のスタックを検索する必要はありません。

もちろん、エンディングはまだ書かれていません。Node.jsの純粋さと若さ、そしてあらゆる場所でのJavaScriptのシンプルさについて大声で叫ぶすべてのコーダーにとって、PHPの深いコードベースと長年理解されている安定性に満足している別のコーダーがいます。古いコジャーはサーバー側のスタートアップを打ち負かしますか?JavaScriptは、世界征服を達成するために旧友を倒しますか?ポップコーンの別のバッチを電子レンジに入れて、座ってください。

PHPが勝つ場所:コードとコンテンツの混合

あなたは一緒にタイプし、あなたのウェブサイトのテキストに考えを注ぎ込み、プロセスにブランチを追加したいと思っています。たとえば、URLのパラメータに応じて、見栄えを良くするための小さなif-thenステートメントです。または、データベースのテキストやデータを混在させたい場合もあります。PHPを使用すると、魔法のPHPタグを開き、数秒でコードの記述を開始できます。テンプレートは必要ありません。すべてがテンプレートです。余分なファイルや複雑なアーキテクチャは必要ありません。指先でプログラム可能なロジスティックパワーのみを使用できます。

ノードが勝つ場所:関心の分離

コードとコンテンツを混在させることは、あなたを不自由にする可能性のある松葉杖です。確かに、最初の2、3回は、コードをHTMLと組み合わせるのが楽しいです。しかし、すぐにあなたのコードベースは論理のもつれた混乱になります。本物のプログラマは構造を追加し、コスメティックレイヤーを論理レイヤーから分離します。新しいプログラマーにとっては理解しやすく、保守も簡単です。Node.jsで実行されるフレームワークは、モデル、ビュー、コントローラーが分離されていると生活が良くなることを知っているプログラマーによって構築されています。

PHPが勝つ場所:深いコードベース

WebはPHPコードでいっぱいです。ウェブサイトを構築するための最も人気のあるプラットフォーム(WordPress、Drupal、Joomla)はPHPで書かれています。プラットフォームはオープンソースであるだけでなく、ほとんどのプラグインもオープンソースです。PHPコードはいたるところにあり、ダウンロード、変更、およびニーズに合わせて使用​​するのを待っています。

ノードが勝つ場所:より近代的な機能

確かに、何千もの素晴らしいオープンソースPHPファイルがありますが、誰かがそれらをダウンロードすることを期待して祈っている12年前のWordPressプラグインもあります。Symfonyのすべての最新バージョンには、誰も更新しない、ほこりっぽい、長い間忘れられていたライブラリがあります。

何年も更新されていないコードで何時間、何日、または何週間もモンキーを使いたいと思う人はいますか?Node.jsプラグインは新しいだけでなく、最新のアーキテクチャアプローチに関する完全な知識を持って構築されています。これらは、最新のWebアプリがほとんどのインテリジェンスをクライアントにプッシュする必要があることを理解しているプログラマーによって構築されました。

JavaScriptには、気が狂うような小さな特異性がたくさんありますが、ほとんどの場合、JavaScriptは、最新の構文とクロージャなどのいくつかの便利な機能を備えた最新の言語です。再構成と拡張が簡単にできるため、jQueryのような強力なライブラリが可能になります。オブジェクトのように関数を渡すことができます。なぜ自分を制限するのですか?

PHPが勝つ場所:シンプルさ(一種)

PHPにはそれほど多くはありません。文字列と数値をジャグリングするためのいくつかの変数と基本関数です。これは、データをポート80からデータベースに移動したり戻したりする以外はほとんど何もしない薄いレイヤーです。それはそれがすることになっていることです。最新のデータベースは魔法のツールであり、手間のかかる作業はデータベースに任せるのが理にかなっています。PHPは、複雑であるとは考えられていないジョブにとって適切な量の複雑さです。

繰り返しになりますが、データベースを操作して結果をフォーマットする以上のことをしたいプログラマーであれば、PHPを使って鼻をかむことなくさらに多くのことができるようになりました。FacebookのHHVMは、型注釈、ジェネリックス、ラムダ式などの最新機能が満載の完全な言語であるHackのサポートを追加します。これを使用すると、コードがHHVMでのみ実行されるように制限されますが、これは世界で最悪の事態ではありません。とても速いです。

ノードが勝つ場所:数十の言語オプション

PHPユーザーがHackにアクセスできることに満足している場合は、JavaScriptで実行するために多くの主要言語をクロスコンパイルできるため、Node.jsの世界への移行を検討する必要があります。Java、C#、Lispなどのよく知られたオプションと、Scala、OCaml、Haskellなどの数十のオプションがあります。BASICやPascalのノスタルジックな愛好家へのギフトもあります。Jeremy AshkenasからJavaScriptにコンパイルされるこの言語のリストは、かなり包括的です。さらに、TypeScriptやCoffeeScriptなどのJavaScriptのいとこは、同じゲームに対してわずかに異なり、改善されたアプローチを提供します。

PHPが勝つ場所:クライアントアプリは必要ありません

ブラウザとサーバーで同じ言語を使用することについての話はすべて素晴らしいですが、ブラウザで言語を使用する必要がない場合はどうでしょうか。データをHTML形式で発送するとどうなりますか?インタラクティブなブリンブリンなしで必要なものを厳密に提供するために質素で静的なWebサイトを構築している場合はどうなりますか?ブラウザがそれをポップアップし、20回のWebサービス呼び出しからブラウザ上にページを作成しようとするJavaScriptスレッドの失火によって引き起こされる頭痛や不具合はありません。純粋なHTMLは何よりも頻繁に機能し、PHPはそれを作成するために最適化されています。なぜブラウザでJavaScriptを気にするのですか?サーバー上にすべてを構築し、小さな電話でその小さなブラウザに過負荷をかけないようにします。

ノードが勝つ場所:サービス呼び出しはHTMLファットPHP呼び出しよりも薄い

AJAXに夢中のHTML5Webアプリには可動部分が多すぎる可能性がありますが、それらはクールで非常に効率的です。JavaScriptコードがブラウザのキャッシュに入ると、ネットワークに沿って移動するのは新しいデータだけです。HTMLマークアップはそれほど多くなく、ページ全体をダウンロードするために何度もアクセスする必要はありません。データのみが変更されました。洗練されたブラウザ側のWebアプリを作成するために時間を割いても構わないと思っているなら、大きな見返りがあります。Node.jsは、Webサービスを介してデータとデータのみを配信するように最適化されています。アプリが複雑でデータが豊富な場合は、効率的な配信のための優れた基盤となります。

PHPが勝つ場所:SQL

PHPは、MySQLおよびMariaDBなどの多くのバリアントと共存するように構築されています。MySQLが正確に正しくない場合は、OracleとMicrosoftの他の優れたSQLデータベースがあります。コードは、クエリにいくつかの変更を加えるだけで切り替えることができます。広大なSQLの世界は、その境界で終わらない。最も安定した、十分に開発されたコードのいくつかはSQLデータベースとインターフェースします。つまり、そのすべての機能をPHPプロジェクトに簡単に統合することもできます。それは完璧で幸せな家族ではないかもしれませんが、大きな家族です。それだけでなく、開発者がデータベースにインテリジェンスを追加する方法を見つけるにつれて、データベースの世界は徐々に良くなっているので、それほど一生懸命働く必要はありません。

Node.jsが勝つ場所:JSON

SQLにアクセスする必要がある場合、Node.jsにはそれを行うためのライブラリがあります。しかし、Node.jsは、最新のNoSQLデータベースの多くと対話するための共通語であるJSONも話します。PHPスタック用のJSONライブラリを取得できないというわけではありませんが、JavaScriptを使用する場合のJSONの操作の単純さには流動的なものがあります。これは、ブラウザからWebサーバー、データベースへの1つの構文です。コロンと中括弧はどこでも同じように機能します。それだけで何時間もの欲求不満からあなたを救うでしょう。

PHPが勝つ場所:コーディング速度

ほとんどの開発者にとって、Webアプリ用のPHPの作成はより速く感じられます。コンパイラー、デプロイメント、JARファイル、またはプリプロセッサーはありません。ディレクトリ内のお気に入りのエディターといくつかのPHPファイルだけです。マイレージはさまざまですが、プロジェクトをすばやくまとめる場合、PHPは使用するのに適したツールです。

Node.jsが勝つ場所:アプリケーションの速度

中括弧と括弧を数えると、JavaScriptコードの記述は少し難しくなりますが、それが完了すると、Node.jsコードが飛ぶ可能性があります。コールバックメカニズムは、スレッドをジャグリングする必要がないため、優れています。コアは適切に構築されており、すべてを実行できるように設計されています。それは誰もが望んでいることではありませんか?

PHPが勝つ場所:競争

PHP開発者の心と精神をめぐる戦いはまだ続いています。HHVMチームとZendチームは、すべての人に高速コードを提供するために懸命に取り組んでいます。独立したベンチマークが登場しており、誰もがコードベースを限界まで押し上げています。これは、パフォーマンスの向上を意味するだけです。

Node.jsが勝つ場所:連帯

本当に2つの異なるコードベースが必要ですか?確かに、競争は助けになりますが、断片化はすぐに続きます。コードが2つのうちの1つだけで実行されるとどうなりますか?コードの書き換えに数週間または数か月を費やさなければならない場合、競争は何の役にも立ちません。Node.jsは数年前に独自の分裂を経験しましたが、io.jsのリリースにより、Node.jsユニバースは再統合され、PHP開発者が間もなく待ち望んでいるような言語の連帯をもたらしました。

PHPが勝つ場所:基本的なアプリ

過去数年間で、数人の開発者がWebアプリを起動し、動作の鈍さに不満を感じています。これらすべての可動部分を駆動するJavaScriptは、数万バイト、場合によっては数十万バイトになる可能性があります。すべてのパケットが到着したら、それらを解析してコンパイルし、最後に実行する必要があります。すべて、温度や予測などの数バイトを配信します。

このロココの狂気に対する反発は、静的サイトジェネレーター(この記事の執筆時点では463)を構築しているチームとAMP形式の削除されたWebページに見られます。PHPは、クライアントに負担がかからないようにインテリジェンスをサーバーに集中させたいチームにとっては当然の選択です。

Node.jsが勝つ場所:豊かさ

建物の建築家であるルートヴィヒ・ミース・ファン・デル・ローエはかつて、「少ないほど多い」と言っていました。別の建築家であるロバート・ベンチュリがやって来て、「少ないのは退屈だ」と反論した。スマートフォンは、Crayコンピューターでいっぱいの部屋よりも強力です。デスクトップには複数のファンを備えたビデオカードがあり、すべての処理中にファンを涼しく保ちます。なぜ私たちはコードを取り除き、スタインベックの小説で大恐慌時代の犠牲者のように生きなければならないのですか?それを生きなさい。JavaScriptコードでいっぱいの大きくて滑らかなウェブサイトは、人目を引く、劇的な、そして何よりも楽しいものです。確かに、数ビットのデータでそれだけの帯域幅を浪費するのは一種のわいせつですが、帯域幅がこれまでになく安くなったことはありません。少し生きろ!

両方が勝つ場所:ヘッドレス

「ヘッドレス」という言葉は、サーバー上で実行されているPHPコードを指します。最近、DrupalのようなトップPHPアプリケーションのいくつかが通路を横切って覗き込み、React、Angular、VueなどのJavaScriptフレームワークによって構築された洗練されたユーザーインターフェイスに驚かされました。彼らと競争しようとする代わりに、彼らはクライアントの制御を譲り、サーバー上のバックエンドで良い仕事をすることに集中しています。

サーバー上で実行されているPHPコードにかなりの投資をしている場合、これは両方のアプローチの長所を享受する方法かもしれません。古い確立されたPHPコードは、データベースへの玄関口として機能し、要求を再確認し、データをクリーンアップし、通常はすべてのビジネスロジックを提供します。クライアント側は、最新のJavaScriptフレームワークで記述されたプログレッシブウェブアプリです。情報が必要な場合は、AJAXリクエストをPHPコードに送信します。

これは、最初から始める人には意味がないかもしれませんが、PHPに何年も依存していて、徐々に前進したい場合は、これは幸せな妥協案になる可能性があります。

両方が勝つ場所:マイクロサービスとサーバーレス

台頭するマイクロサービスまたはサーバーレスパラダイムは、JavaScriptとPHPコードがサーバーと共存してうまくやっていく方法を提供します。どちらのソリューションも、作業を数十の小さなサービスまたは機能に分割し、これらは独立して実行され、レーンにとどまることができます。一部の部分、通常はアプリの最も古くて最も安定したセクションで、PHPを実行できます。他の部分、多くの場合新しい部分は、Node.jsで記述されます。POSTまたはの言語は、GETそれらすべてを統合する共通語にすることができます。