最近の SitePoint PHP と Node.js Smackdown 記事で、Craig Buckler は、2 つの言語が一連の 10 の課題にどのように対処したかを比較し、総合的にどちらが優れているかを判断しました。
クレイグは本の中で、こうした比較は常にどこか矛盾していると語っています。楽しいフォローアップとして、Bruno Škvorc (SitePoint の PHP 開発者) と James Hibbard (SitePoint の JavaScript 開発者) に各ラウンドについてのコメントを依頼しました。
以下は彼らの詳細な見解です...
ラウンド 1: 開始
ラウンド 1 課題は、各言語で「Hello World」ページをどれだけ速く構築できるかを確認することです。これには、サーバー環境のセットアップに費やした時間も含まれます。
Craig の推定では、PHP がこのラウンドで勝った理由の 1 つは、この言語が「概念的に単純」で「新しい開発者にとって威圧感が少ない」ためです。
ブルーノ:
PHP が「Get Started」ラウンドで優勝したのは、純粋により多くのホストがこの言語をサポートしているため、開始が非常に簡単であるためです。追加の操作を行わずにすぐに使用できます。より多くのホストが Node コマンド ラインの使用を無視し、直接ファイルのアップロードとコントロール パネルの単純な「アプリの再読み込み」キーを実行した場合、どちらも同じになります。ただし、画面上に表示するための実際の構文という点では、特にプログラミング経験のない人にとっては、PHP の方が簡単です。
ジェームズ:
ローカルマシンで開発する場合、この 2 つに大きな違いは見られません。ブラウザで PHP スクリプトを実行するには、サーバー ソフトウェアをインストールする必要があります。Node スクリプトを実行するには、Node と、できれば Express などの Web フレームワークをインストールする必要があります。ただし、Craig 氏が言うように、PHP は「概念的には単純です」。参入障壁が高くなります。これについては異論はありません。
ラウンド 2: ヘルプとサポート
2 番目のラウンドでは、両方の言語でヘルプやサポートを受けることがいかに簡単かを検討します。 PHP がこのラウンドで勝利したのは、主に PHP が長く存在しているためです。
ブルーノ:
この件については黙っててください。
ジェームズ:
私はこの意見に同意します。 Node は新しいテクノロジーであるため、現時点ではサポートは少なくなります。しかし、Node がますます成熟すると、この側面は問題ではなくなります。
ラウンド 3: 文法
第 3 ラウンドでは、2 つの言語の文法の理解しやすさを比較しました。クレイグはこのラウンドでノードが勝利したと判断しました。
ブルーノ:
私はこの見解に強く反対します。確かに、PHP 構文にはいくつかの癖があり、その多くは修正されており、さらに多くの点が新しいバージョンでは削除される予定です。一方で、JSには「これ」という問題もありますよ~
箇条書き 3 (開発時に、js を使用すると、クライアント側開発とサーバー側開発を切り替える必要がありません) については、私はこの概念に同意しません。サーバー環境とクライアント開発環境は完全に切り離されており、依然として脳内のスイッチングが必要です。ブラウザーでは使用できない新しい構文が常に存在し、その逆も同様であるため、これはある意味、言語の切り替えでもあります。
箇条書き 4 (JS を理解するともっと使いたくなる) これにはある程度同意します。 私は仕事で長年にわたって JS と PHP を使用しており、さらに長い間 JS を使用してきましたが、JS にはあまり思い入れがありません。これは完全に個人的な好みですが。
ジェームズ:
私はJavaScriptが大好きです。これには癖があることは承知していますが、何らかの理由で ECMAScript 2015 が事態を一変させ、この言語にいくつかのエキサイティングな新機能をもたらすことも知っています。 JavaScript は強力かつ柔軟で、さまざまなスタイルのプログラミングに対応できます。私は PHP ではなく JavaScript を使用するのが好きです。 NodeNode.js) もその 1 つです。
ラウンド 4: 開発ツール
ラウンド 4: これら 2 つのテクノロジーで使用される開発ツールを考慮すると、開発ツール npm を備えている Node の方がわずかに優れています。
ブルーノ:
とはいえ、開発者は最初は npm に触発されていましたが、今では npm よりもはるかに使いやすくなっており、コンピューターに同じライブラリの 2 つのバージョンがインストールされている場合、飛躍的にシステムの崩壊が遅くなるわけではありません。 。また、npm と比較すると、飛躍的にデザイナーは再帰的思考を使用できるようになり、再帰的思考は非常に重要であるため、開発者がパッケージ マネージャーを構築する準備ができたとき、これが最初に検討されることになります。
npm には、「開発者とのコラボレーションのしやすさ」という致命的な欠点もあります。npm では、開発者自身しか理解できないのです。最後に、npm は Vagrant とうまく連携できません。これは、npm がユーザーのニーズに注意を払わないことは言うまでもなく、自分で作業を開始することを直接妨げます。 npm には長年にわたって存在するバグがあり、そのためソフトウェアが Windows 上で基本的に使用できなくなります。これは小さな問題ではありません。もちろん、PHP には愚かなバグがたくさんありますが、これらのバグがシステムに問題を引き起こすことはありません。
PHP にコンパイラーが付属していないのは事実ですが、私はそうすべきではないと思います。このような利便性は、パッケージ マネージャーやスタンドアロン アプリケーションによって実現されるべきではありません。いつか誰かが Node 用の優れたパッケージ マネージャーを開発したとしても、それを既存のコンパイラーに置き換えるのは非常に困難になるでしょう。比較的独立したものにし、人々が簡単に切り替えられるようにします。さらに、インストールには、ターミナルにコードを 1 行入力するか、インストーラーをダウンロードするだけで済みます。
この本の中で、コンパイラはほとんど影響を与えないという記述は、明らかな間違いです。このコンパイラは、PHP が開発されて以来、すべての新しい PHP 開発者に影響を与えてきましたが、最も優れた開発者の中には、コンパイラを既存のパイプラインに追加する必要がある人もいます。コンパイラーが存在する前から多くの PHP ユーザーがいたからといって、コンパイラーの有用性が低下するわけではありません。実際、導入以来、大きな反響を呼んでいます。 「地域社会への影響はほとんどない」という一部の主張には、実際にはまったく根拠がありません。
さて、ほとんどの PHP 開発者が Node のインストールを望んでいるという事実には異論はありません。これは本当の事実です。残念なことに、多くの優れたツールは当初 Node に基づいて開発されましたが、Node-free 開発環境と同様に、BowerPHP の開発にも Node フリー開発環境を使用できることを願っています。
ジェームズ:
誰かがNodeに参加してくれるのをとても楽しみにしています。
npmが好きです。インストールも使用も簡単で、ほぼすべてのニーズに対応できる数千のパッケージが用意されています。また、npm がグローバル パッケージとローカル パッケージを選択できるという事実も気に入っています (標準では、パッケージを Ruby のバージョンと一緒にインストールする必要がある Ruby などの一部の言語と比較して)。そのツールも素晴らしいです。 Bower や Grunt などの一部のツールは、私のワークフローに永続的に組み込まれており、生産性を飛躍的に向上させました。
npm がバージョン 3 のベータ版を開発したことにも言及する価値があります。これにより、入れ子になったnode_modulesメソッドのエラーなど、Brunoが言及した問題の多くが解決されます。
以下は全文からの引用です:
PHP 開発者は、場合によっては Node.js をインストールしたい、またはインストールする必要がある場合があります。逆は当てはまりません。
ラウンド 5: 環境
5 番目のラウンドは、テクノロジーの可用性と展開、およびそれをサポートするプラットフォームとエコシステムについてです。 Craig はこれについてはあまり明確ではありませんが、Node を支持しているようです。
ブルーノ:
Craig は、一般的な Web 開発の問題に関して PHP と Node の利点を比較したと述べ、その後、JS があらゆる場所で使用されていると述べました。まず、JS 自体ではなく Node.js を比較し、次に、両方の言語が実行できる環境を比較します。魚は愚かすぎて木に登ることができないため、サルは魚よりも強いですが、サルも魚も泳ぐことができます。それでは、彼らがどれだけうまくいくかを比較してみましょう。
Web 開発環境では、PHP が勝ちます。ここでは、PHP ベースのデスクトップ プログラム ツールをいくつか紹介します。はい、使用しないかもしれませんが、これらの PHP ベースのコマンド ライン プログラムは間違いなく使用します。
ジェームズ:
クレイグと私は再び同じページにいます。 Node.js の人気を高めたいくつかの機能 (速度、スケーラビリティ、JSON への緊密な接続、リソース フットプリントの低さ) により、Node.js は強力な IoT デバイスなど、他の多くの種類のアプリケーションに適しています。ロボットが嫌いな人がいるでしょうか?
Node は、NW.js (Chromium および Node.js に基づくアプリケーション) などのプロジェクトを強化し、HTML や JavaScript でネイティブ アプリを作成できるようにします。楽しそう!
ラウンド 6: 統合
ラウンド 6 では、主に古いという理由で PHP が勝利する、データベースとドライバーの統合を見てみましょう。
ブルーノ:
統合という点では、実際には PHP には古い利点があり、より多くのオプションを利用できますが、mysql 拡張機能などの多くの古いテクノロジーに対処することも意味します。PHP7 にアップグレードして取り除くことができます。しかし、何年もの間利用できませんでした。
ジェームズ:
漠然としているように見えても、私は確かにこれに同意します。そして、この例がとても気に入っています。「時代遅れでより普及したテクノロジー」。これは、Node の JSON のネイティブ サポートという大きな利点も強調しています。 JSON はおそらく Web 上で最も重要なデータ転送形式であり、最新の NoSQL データベースの一般的な構造です。 JavaScript プログラムで JSON を使用するのは非常に簡単です。つまり、Node を使用する場合、フォーマット変換を必要とせずにデータを非常に簡潔に送信できます。ブラウザ、サーバー、データベース間の受け渡しに使用できる構文 (JSON 形式) は 1 つだけです。
ラウンド 7: ホスティングと展開
ラウンド 7 では、新しいアプリケーションを Web サーバーにデプロイするのがいかに簡単かを検討します。Craig の意見では、ここでは PHP が明らかに勝者です
ブルーノ:
ブルーノは再び沈黙を守ります。
ジェームズ:
これは、Node が改善に取り組む必要がある領域です。 Web ホスティングを提供するすべての企業が PHP と MySQL を提供しています。出力を確認したい場合は、拡張子が「.php」のファイルを作成し、 と ?> の間に有効なコードを記述してアップロードし、ブラウザでアクセスするだけです。ただし、同じ方法は Node では機能しません。もちろん、ノード ホスティングには多くのオプションがありますが、より多くのセットアップとコマンド ライン アクセスが必要であり、初心者にとっては不快な場合があります。 PHP がこのラウンドで勝利したことは疑いの余地がありません。
ラウンド 8: パフォーマンス
第8ラウンドは主にスピードに焦点を当てます。これは多くの場合、開発チームの経験と熱心さによって決まりますが、Craig 氏は、Node にはいくつかの領域で利点があると指摘しました。
ブルーノ:
間違いが多い。まず、この記事ではパフォーマンスについて詳しく説明していますが、開発者のエクスペリエンスやアプリケーションの種類がパフォーマンスに与える影響は除外されています。この記事を読んでも、文脈なしにパフォーマンスについて話すことがいかに愚かであるか理解できない場合は、私の見解を共有しましょう:
PHP にはマルチスレッドサーバーが組み込まれています。これにより、外部サーバーを完全にバイパスすることが可能になりますが、まだ推奨されていません。 Nginx などの超高速サーバーもあり、PHP の起動とリクエストのディスパッチのプロセス全体が無視できるほど高速になります。
PHP のネイティブ非同期 (ノンブロッキング I/O) サポートは PHP7 で導入される予定で、ReactPHP は数年前に同様のパターンを実装しているため、これも意味がありません。
PHP シングルリクエストライフサイクルモードは最大の負担です。確かに、純粋に速度を追求している場合、Craig が言った Memcached や同様の方法だけでなく、Ajax と同様の方法でも、これは簡単にバイパスできます。ちなみに、サーバーサイド JS アプリケーションもデフォルトでは単一リクエストです。さらに、この単一リクエストのライフサイクルも利点であり、アプリケーションはリクエストごとに再構築されるため、多くのメモリの問題が回避され、ガベージ メモリがクリアされ、スリムでクリーンな状態が維持されます。フロントエンドまたはバックエンドで、安定して長時間実行され、メモリリークのない Javascript アプリケーションを最後に使用したのはいつですか?
パフォーマンスに関する議論は、Java を使用していない限り引き分けであり、Java を使用している場合は Java の負けです)
ジェームズ:
Node は、高性能かつ低遅延のランタイム環境で知られており、フォーチュン 500 企業のコード スタックに埋め込まれる独自の方法も発見しました。ノンブロッキング I/O メカニズムと Google Chrome V8 エンジン テクノロジーのおかげで、Node は「高速」と「スケーラブル」の代名詞になりました。現在、インターネット上には、Node を使用することで企業のパフォーマンスが向上し、開発者の生産性が向上するなど、多くの記事が掲載されています。このラウンドでノードが勝ったことを嬉しく思いますが、これに疑問を抱く人がいることも理解しています。
ラウンド 9: プログラマー複雑
第 9 ラウンドでは、Craig が平均的なプログラマーが PHP と Node に対してどの程度の愛情を持っているかを見てみましょう。最終的には Node が勝ったと考えています。
ブルーノ:
クレイグ、あなたは間違った場所を見ているでしょう。PHP コミュニティは信じられないほど情熱的で活発で、毎年 20 を超えるカンファレンスや非常に刺激的なトピックのディスカッションが行われています。こうしてHHVMのPHP7が完成しました。
また、6 年間の開発を経た後でも、Node 開発者がどのバージョンに取り組んでいるのか (v0.12.5 はすでに書かれています) に興味があると言いたいです。これは未熟で危険です。なんと、不安定なテクノロジを使用しています。意図的にビジネスを失敗させているのですか?) さらに、オペレーティング システムの古いバグが無視され、重要な開発者の一部が言語エコシステムから離れることになります。 。
いくつかのネガティブな経験により、Node が嫌いになりました。主に npm のせいです。将来的には変わるかもしれませんが、今のところ、Node を使用するたびに恐怖と失望を感じます。好みは人それぞれですが、客観性を保ち、仕事に適したツールを選択することが重要です。しかし、誰もが後知恵でやっていることなので、他の人が試みて失敗することを許容することも重要です。だからクレイグの言うこともジムの言うことも私の言うことも聞かないでください。試してみて、何が機能するかを確認し、使い心地が良いものを見つけてください。最終的には、ロード時間を節約するだけのものではなく、生産性を感じられるものが最適です。
ジェームズ:
Node は非常に人気があり、Node の分野には多くの革新があります。情熱は客観的ではありませんが、Node がこのラウンドで勝ったことを嬉しく思います。
ラウンド 10: 未来
第 10 ラウンドでは両言語の見通しが検討され、現段階では両言語に強い将来性が期待されているため、クレイグ氏はこのラウンドの結果は引き分けであると結論付けました。
ブルーノ:
ブルーノは急いで PHP に関する記事をもっと書いて、素晴らしい SitePoint PHP チャンネルを維持しなければなりません。
ジェームズ:
James も、大好きな JavaScript チャンネルに戻るのが待ちきれず、次のようなコメントを残しました:
このラウンドでは引き分けが公正です。 Node は新星ですが、PHP の座を奪うにはやるべきことがたくさんあります。
要約すると、ハンマーが唯一のツールである場合、すべての問題は釘のように見えます。もちろん、Node がすべてのソリューションに完全に適しているわけではありません。多くの場合、Node を使用しないのが非常に合理的です。ただし、Node ができることは非常にうまく機能します。情報に基づいて決定を下し、プロジェクトに最適なツールを選択するのは完全にあなた次第です。
ブルーノとジェームスが意見を表明しましたが、この問題についてどう思いますか?
ブルーノ・スクヴォルク
ブルーノはクロアチア人のプログラマーで、コンピューター サイエンス、英語、文学の 3 つの修士号を取得しています。彼は SitePoint の PHP コラムニストであり、Diffbot.com の開発エバンジェリストでもあります。疫病のようなレガシー コードを避け、最新のテクノロジを使用するプロジェクトを選びます。また、トレッドミル デスクの愛好家でもあり、ゲーマーでもあります。ブログも開設しています。
ジェームズ・ヒバード
私は現在、太陽の光が降り注ぐ北ドイツに住んでいるウェブサイト開発者です。私は JavaScript と Ruby でのプログラミングが大好きで、SitePoint の JavaScript フォーラムでよく見かけます。コーディングをしていないときは、ランニングを楽しんでいます。