翻訳者から
このテーマに関する定性的特性分析とパフォーマンス予測に関する記事が多数あります。 ただし、PHPまたはNodeJS(サーバー側JavaScript)のみを学習している初心者に警告するために、プロのプログラマーが意見を共有して何かを提案しようとする記事を探していました。 多くの人はPHPが嫌いで、PHPは死ぬために作成されたと言っています(はい、スクリプトの実行後に変数を強制終了するガベージコレクターがあります。RasmusLerdorfがスローしたためではありません)。一方、インターネット上のサイトの80%はそれで動作します。 したがって、プロフェッショナルになりたいと考え、何らかの形で視野を広げるには、PHPタスクとNodeJSタスクを明確に分離し、すべてをヒープにマージする必要はありません。
「異なる体重カテゴリのボクサーの10ラウンド」
ある晴れた日、SitePoint.comのCraig Bucklerは、絶対チャンピオンが誰であるかを判断するために、「10ラウンド」と呼ばれるPHPとNodeJSの比較分析を公開しました。 しかし同時に、彼はそのような分析は幾分議論の余地があると指摘した。 したがって、いくつかの娯楽のために、彼はこのボクシングの試合に貢献したであろう2人の裁判官を招待した。 彼は、SitePoint.comのPHPコラムの編集者であるBrunoŠkvorcと、SamePoint.comのコラムの編集者であるJames Hibbardに、各ラウンドについてコメントするよう依頼しました。
はじめに
Webプログラミングは急速に発展しており、バックエンドの開発者は、Java、C、Perl、Ruby、Clojure、Goなどの最新のWeb指向言語の確立されたヘビーウェイトを選択するという問題に直面しています。 あなたの選択は非常に重要であり、アプリケーションにそのマークを残します。
しかし、Web開発に最適な選択肢は何ですか?
ホリバーを始めたくありませんが、今日もPHPとNodeJSについてお話します。
- PHP-1994年にRasmus Lerdorfによって作成されました。 彼は、ApacheまたはNginx Webサーバーのモジュールとしてインストールされるプログラムシェル(インタープリター)を作成しました。 もともとハイパーテキストページのプリプロセッサとして開発されたため、PHPをHTMLコードに簡単に統合できますが、このアプローチは今ではお勧めできませんが、初心者にとってはこのアプローチは明らかでした。 これがこの言語の人気に貢献したため、インターネット上のサイトの80%がPHPで記述されており、特にWordPress CMS(インターネット上のサイトの20%)を実行しています。
- Node.js-2009年にRyan Dahlによって作成されました。 彼は、GoogleのJavaScript V8エンジンに基づいてソフトウェアプラットフォームを作成しました。 珍しいことに、プラットフォームにはリクエストとレスポンスを処理するための組み込みライブラリがあるため、サードパーティのWebサーバーやその他の依存関係を使用する必要はありません。 Node.jsは勢いを増しており、Microsoft、Yahoo、LinkedIn、PayPalなどの企業で使用されています。
C#、Java、Ruby、Python、Perl、Erlang、C ++、Go、Dart、Scala、Haskellなどについて話してみませんか?
あらゆるものに関する記事を読みますか、百科事典が必要ですか? そのため、次の理由により、サークルを2つの有名なサークルに限定して狭めました。
1. PHPとNode.jsはWeb指向で、どちらもオープンソースコードを持ち、Web開発専用です
2. PHPは古い言語ですが、今回のケースではNode.jsが人気を博している新興企業であるため、PHP開発者は質問をする必要があります。 技術を変えることは価値がありますか?
3.多くの開発者は、遠い90年代からPHPとJavaScriptにプログラミングしますが、誰もが他のプログラミング言語に切り替えたがるわけではありません。
ルール
右隅のボクサー-PHP、左隅のボクサー-Node.js。 絶対的な勝者は、ラウンド数で勝つ技術です。
ラウンド1:クイックスタート
このラウンドでは、特定のプログラミング言語で「Hello、world」ページをどれだけ早く作成できるかを決定します。この時点で、サーバーのセットアップに費やした時間を含めます。
環境の準備:
1)PHPで「Hello World」Webページをどれくらい速く構築できますか。
<?php echo 'Hello World!'; ?>
このコードは、どこでも記述できます。原則として、コードは拡張子が.phpのファイルに記述されます。 このコードをindex.phpファイルに記述し、ポート8000を介してローカルサーバーで(実際のホスティングではなく、コンピューターで)起動した場合、その表示は次の場所で利用できます。
http://localhost:8000
。
ただし、組み込みサーバーで既製のPHPインタープリターを使用することは、かなり信頼性の低いタスクです。 既製のソリューション、Apacheアセンブリ-XAMPPまたは仮想OS(Vagrant)を使用することをお勧めします。 ところで、インターネットホスティングにファイルをアップロードできます。
2)Node.jsプラットフォームのインストールは可能な限り簡単です。UNIXのようなシステムで作業している場合は、パッケージマネージャーの助けを借りてこれを行うことができます。 index.jsページを作成しましょう。
const http = require('http'); const hostname = 'localhost'; const port = 8000; http.createServer((req, res) => { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('Hello World\n'); }).listen(port, hostname, () => { console.log(`Server running at http://${hostname}:${port}/`); });
同じ手順を繰り返しました; JavaScriptコードは通常、拡張子が.jsのファイルに書き込まれます。 index.jsファイルにこのコードを記述し、ポート8000を介してローカルサーバーで起動した場合(実際のホスティングではなく、コンピューター上で)、その表示もアドレスで使用可能になります(PHPが別のポートで動作する場合) :
http://localhost:8000
ここでコードを評価しましょう。クライアント側のJavaScriptをよく知っていても、ここで何が書かれているかを考えて理解する必要があります。 Node.js側でのクロージャーとコールバック関数、約束、プログラミングを理解するにはある程度のスキルが必要です。
PHPは概念的にシンプルで、このラウンドで勝ちます。 PHPにはいくつかのソフトウェア依存関係がありますが、PHPの学習はそれほど難しくありません。
審査員スコア-PHP 1:0 Node.js
- ブルーノ:エントリーのしきい値が低いため、PHPが勝ちます。 それはむしろ認識の問題です。 画面上では同じように表示され、大きな違いはありません。 実際、初心者のプログラミングでは構文がはるかに簡単です。
- ジェームズ:ローカルマシンで開発する場合、この2つの違いはわかりません。 ブラウザでスクリプトを実行するには、Webサーバーとターミナルが必要です。 Node.jsで何か深刻なことを行うには、追加のモジュール、たとえばexpress(Webアプリケーションのフレームワーク)をインストールする必要があります。 ただし、概念的には、PHPはよりシンプルです。
ラウンド2:ヘルプとサポート
実際、コースや現代の実践を勉強せずに知識を学ぶことはできません。開発するには、StackOverflowなどのフォーラムで質問する必要があります。 PHPはこのラウンドで簡単に勝ちます。php.netに優れたガイドがあり、20年にわたるよくある質問があります。 あなたが何をするにしても、誰かがこの問題に遭遇し、あなたのためにそれを解決しようとしました。
Node.jsには優れたドキュメントがありますが、テクノロジーはかなり新しいため、フォーラムでの回答が大幅に少なくなります。
審査員スコア-PHP 2:0 Node.js
- ブルーノ: 何も言わなかった
- ジェームズ:そうですね。 Node.jsはより新しいテクノロジーであるため、サポートとドキュメントが必要です。 ただし、この問題は、ノードが古くなるにつれてますます深刻になります。
ラウンド3:言語構文
一部の言語やフレームワークとは異なり、PHPは特定の方法で作業することを強制せず、あなたとともに成長します。 シンプルなPHP4関数を使用して小さなプログラムを作成できますが、MVC PHP 5以降とは美しさが異なります。 ただし、この場合、コードは混oticとしている可能性があり、いくつかのことを理解した場合にのみ、より良いコードを書き始めます。
PHP構文は、新しいバージョンのリリースで変更されました。これは、下位互換性に関する作業が行われたためです。 PHP4からPHP5にコードを簡単に移植できます。 ただし、このアプローチの結果として、PHPで混乱が生じています(混乱)。
たとえば、文字列の文字数をどのように数えますか?
-カウント()? str_len()? strlen()? mb_strlen()?
このドキュメントにはいくつかの機能がありますが、実際にはすべてがシンプルです。 一般に、PHPには同じように機能する多くの関数があり、メンターに相談せずに数行のコードを書いてみてください。
<?php $str = 'Hello world'; $size_1 = count($str); $size_2 = strlen($str); // $len = [$size_1, $size_2]; print_r($len); ?>
C JavaScriptは異なります:
var len = ('Hello world').length; console.log(len);
JavaScriptは同時に比較的明確であり、いくつかの大きな傾向があることがわかります。 そのオブジェクトプロトタイプモデルは開発者を魅了し、構文は非常に簡単に思えますが、そうではありません。 数学的なエラー(0.1 + 0.2!= 0.3)および動的な型指定( '4' + 2 == '42'および '4'-2 == 2)に対する批判があります。 しかし、これらの状況が問題を引き起こすことはめったになく、すべての言語に機能があります。
PHPには多くの利点がありますが、何らかの理由でNode.jsが勝ちます。
1. JavaScriptは世界で最も曖昧な言語のようですが、その概念を理解するとすぐに、他の言語はそれに比べて扱いにくくなります。
2. JavaScriptはPHPよりも最小限に見えるため、同じUTF-8を扱う必要はありません。
3.フルスタックの開発者は、クライアント側とサーバー側の両方でJavaScriptコードを記述できます。 テクノロジーを切り替える必要はもうありません。
4. JavaScriptを学習し、この言語でますます多くのことを書きたい、これはPHPについては言えません。
審査員スコア-PHP 2:1 Node.js
- ブルーノ:この点には強く反対します。 PHPには独自の特性がありますが、それらの多くは最近修正されており、最新バージョンでは多くの奇妙な点が削除されています。 一方、JSの世界にもまったく同じことがあります。 サーバー側については、私も同意しません。 クライアント側とサーバー側は2つの異なるものであり、いずれにせよ、頭を切り替える必要があります;ブラウザーのJavaScriptコードを記述する場合、Node.jsで記述する場合のサーバー構文は同じです。 JSとPHPで働いたことがありますが、かつて私は最初のほうが好きではありませんでしたが、これらは純粋に個人的な好みです。
- James:JavaScriptが大好きです。 奇妙な点があることは知っていますし、いくつかの落とし穴があることは知っていますが、2015年のECMAScriptは多くを修正し、言語に興味深い新機能を追加しています。 JavaScriptは強力で柔軟性があり、さまざまなプログラミングスタイルに対応できます。 PHPとは異なり、JavaScriptで書くのが好きです。 Node.jsがこのラウンドで勝利します。
ラウンド4:開発者ツール
どちらのテクノロジーにも、エディター、統合開発環境、デバッガー、バリデーター、その他のツールが豊富に揃っています。 ここでドローを与えることができますが、Node.jsには優れたツールがあります。npmはパッケージマネージャーであり、モジュールと依存関係を管理できます。
PHPには、npm-Composerの影響下で開発された独自のパッケージマネージャーがあります。 ただし、npmがデフォルトでビルドされる場合、そのコンポーザーは独自にビルドする必要があります。 npmのおかげで、GulpとGruntはフロントエンドプロジェクトの構築に広く使用されています。
審査員スコア-PHP 2:2 Node.js
- ブルーノ:元々作曲家はnpmに触発されていましたが、現在はnpmよりも優れています。 npmとは異なり、同じライブラリの2つのバージョンをインストールする場合、Composerはシステムを損傷しません。 また、npmとは異なり、composerは再帰的な依存関係をインストールできますが、npmは単にインストールできません。 Npmには、「フレンドリー」と呼ばれる完全に恐ろしいエラーメッセージもあります。 最後に、npmはVagrantではうまく機能しないため、ユーザーの希望に注意を払っていないことは言うまでもなく、適切に開始できません。 エラーが長年にわたって発生していました。そのため、Windowsのユーザーには適していませんでした。これは、小さなユーザーベースではありません。 もちろん、PHPにもエラーがありますが、これも愚かですが、長年にわたってOS全体を撃退していません。
- ジェームズ:私はnpmが大好きです。 使いやすく、ほとんどすべてのニーズに対応できる数千のパッケージがあります。 また、npmを使用すると、パッケージのグローバルインストールとローカルインストールのどちらかを選択できるという事実も気に入っています(Rubyのような、gemの標準である言語とは異なります)。 バウアーやグラントなどのツールは、私の仕事において永続的な位置を占めており、何度も私の生産性を向上させています。
第5ラウンド:水曜日
これらのテクノロジーはどこで使用できますか? それらを展開する方法は? どのプラットフォームがサポートされていますか? Web開発者は、多くの場合、Webにのみ関連するアプリケーションを作成する必要があります。たとえば、オンラインサービスの開発、データ変換スクリプトなどです。
PHPでは、デスクトップアプリケーションまたはコンソールユーティリティを開発できますが、ほとんどの場合、PHPはサーバー側で必要であり、この境界を超えることはめったにありません。
数年前、JavaScriptはブラウザ専用に使用されていました。 Node.jsの登場により、デスクトップおよびモバイルアプリケーションを作成でき、マイクロコントローラーをプログラミングすることもできます。 Node.jsはJavaScriptの境界を拡大しました。
審査員スコア-PHP 2:3 Node.js
- ブルーノ:まあ、まず、PHPとNode.jsを比較しています。PHPとJSは比較していません。 次に、機能する言語と環境を比較します。 魚は木に登ることができなかったので、猿は魚よりも優れていると言うことは、単に愚かです。 しかし、サルも魚も泳ぐことができるので、彼らがどれだけうまく泳いでいるかを比較しましょう。
- James:Node.jsを非常に人気のあるいくつかの機能(速度、スケーラビリティ、JSON互換性、低リソース使用量)により、マイクロコントローラ(IoT)の開発を強化するなど、他の多くのアプリケーションで使用できます。 ロボットが嫌いな人はいますか?
第6ラウンド:統合
データベースおよびドライバーと統合できない限り、開発テクノロジーは制限されます。 PHPはこの分野で強力です。 開発は長年にわたって行われており、そのシステム拡張により、APIを使用するすべてのホストで直接作業することができます。
Node.jsはすぐに追いつきますが、古いもののための最新の統合コンポーネントを見つけるのはかなり困難です。
審査員スコア-PHP 3:4 Node.js
- ブルーノ:ここで引き分けをします。 PHPには年齢的な利点があり、より多くの機能を提供しますが、ここでも、PHP7でやっと取り除いたMySQL拡張など、時代遅れの統合されたものに悩まされる可能性がありました。
- ジェームズ:私はそれに同意するかどうかわかりません。 「テクノロジーではあまり人気のない古いもの」の例が欲しいと思います。 Node.jsの主な利点の1つは、JSONを理解できることです。 JSONは、おそらくインターネット上でデータを交換したり、NoSQLデータベースとやり取りしたりするための最も重要な形式です。 Node.jsを使用すると、データを再フォーマットせずにレイヤーできれいに流すことができます。 データベースと通信するときの構文は1つです。
第7ラウンド:ホスティングと展開
新しいアプリケーションを実際のWebサーバーに簡単に展開できますか? PHPのもう1つの明確な勝利があります。 インターネットホスティングはすべてPHPをサポートしています。 MySQLデータベースをお買い得価格で入手できます。 ここでは、PHPはサンドボックス(ローカルサーバー)よりもはるかに単純であり、どのPHP拡張機能が無効になっているか、および無効になっていないかが正確に通知されます。
Node.jsは完全に異なる獣であり、接続を切断することなくサーバー側で常に機能します。 そのためには、専用のホスティングサービスを探す必要があります。 仮想クラウド(VDS / VPS、サーバー環境、フルアクセス)が必要になります。 残念ながら、すべてのホスティング事業者がこれを購入できるわけではないため、価格はそれに応じて異なります。
審査員スコア-PHP 4:4 Node.js
- ブルーノ: サイレント
- ジェームズ:将来的には、Node.jsが多くを補うでしょう。 通常、PHP WebサーバーはMySQLとともに配布されます。 いくつかのphpコードを表示するには、拡張子が.phpのファイルを作成し、コードを<?Php and?>の間に置き、ファイルをサーバーにアップロードし、アドレスバーでこのファイルへのパスを指定するだけです。 Node.jsについても同じことが言えません。 もちろん、Node.jsには多くのホスティングオプションがありますが、常により詳細な構成とコマンドラインへのアクセスが必要であり、潜在的に初心者を寄せ付けません。
第8ラウンド:パフォーマンス
PHPは前かがみにならず、実際のプロジェクトと、PHPをより高速に動作させるオプションがあります。 最も要求の厳しいPHP開発者でさえ、速度についてほとんど心配しませんが、Node.jsのパフォーマンスは一般的に優れています。 もちろん、パフォーマンスは主に経験とチーム開発の結果ですが、Node.jsにはいくつかの利点があります。
1.依存関係が少ない
PHPアプリケーションへのすべてのリクエストは、Webサーバーに送信される必要があります。Webサーバーは、PHPインタープリターを実行し、コードを処理して送信します。 Node.jsにはそれほど多くの依存関係は必要ありません。Expressなどのサーバーでフレームワークを使用することはほぼ確実ですが、完全に軽量であり、アプリケーションの一部を管理します。
2.クイック通訳
Node.jsは、PHPよりも小さくて俊敏です。 これは、JavaScriptエンジンV8のパフォーマンスに多大な貢献をしたGoogleの遺産によるものです。
3.アプリケーションは常に動作します
PHPは、通常のクライアントサーバーモデルを実行します。 各ページ要求は、アプリケーションによって開始され、データベース接続パラメーターをロードし、情報を抽出し、HTMLコードを表示します。 Node.jsでは、アプリケーションは常に実行されており、一度だけ初期化する必要があります。 たとえば、新しい要求が行われたときに再利用される単一のデータベース接続オブジェクトを作成できます。 確かに、memcachedなどの特別なシステムを使用してこの動作をPHPに実装する方法がありますが、これは標準の言語関数ではありません。
4.イベント、非ブロッキング入力/出力ストリーム
PHPおよび他のほとんどのサーバー言語は、明らかなロックモデルを使用します。 データベースから情報を取得する要求を行うと、要求は次のステートメントに進む前にプロセスを完了して完了します。 Node.jsは異なります。 Node.jsは待つ必要はありません。 代わりに、プロセスのリッスン中にアクションの完了後に実行されるコールバック関数を作成できます。
Node.jsアプリケーションはPHPよりも著しく高速ですが、落とし穴があります。
Node.js / JavaScriptは単一のスレッドで実行され、ほとんどのWebサーバーはマルチスレッドであり、リクエストを並行して処理します。 非同期コードの記述は複雑で、独自の問題を抱えています。
審査員スコア-PHP 4:5 Node.js
- ブルーノ:多くの誤解があります。 まず、パフォーマンスの議論は議論の余地があります。 パフォーマンスの向上は、開発者の経験とアプリケーションのタイプのみに依存します。 しかし、このメッセージが説得力のないものであっても、ここに私自身の議論がいくつかあります:PHPはマルチスレッドの組み込みWebサーバーで非常にうまく機能します。外部サーバーを完全に使用することはできませんが、推奨されません(現時点では)。 Nginxなどの超高速サーバーもあり、PHPを起動して要求を委任するプロセス全体を見えなくします。 HHVMやAppserverなどのプロジェクトは、強力な非同期およびマルチスレッドの側面を追加します; PHP7自体は、更新されたバージョンでさらに強力になります。 はい、phpアプリケーションは静的のみを受け取り、リクエストごとに1回のみ有効です。ただし、これは回避できます:memcached、ajax。 サーバーJSアプリケーションは、デフォルトで単一のリクエストで実行されます。 PHPはページを更新するために絶えずリクエストを行う必要がありますが、さらに、リクエストをPHPで再度行うと、アプリケーションが(リクエストされるたびに)使用されるときに復元されるため、1つのリクエストの寿命は利点にすぎません。メモリの問題を回避し、ゴミをきれいにします。
- James:Node.jsは、高性能で低遅延のアプリケーションを備えたプラットフォームとして配布されています。 Node.jsは、ノンブロッキングI / OメカニズムとGoogle Chrome V8テクノロジーのおかげで、「高速」および「スケーラブル」という言葉の代名詞となっています。 Node.jsがどのように企業に深刻な生産性の向上をもたらし、開発者自身の生産性を向上させたかについて、多くの物語があります。 私はこれを喜んでいますが、これもまた重要なポイントです。
9回目:プログラミングへの情熱
比較するのは少し難しいですが、言語自体に情熱を傾けるPHP開発者は比較的少数です。 PHPで最後に記事を読んだのはいつですか? おそらくすべてが言われた? たぶん面白くないですか? たぶんあなたは正しい場所を見ていませんか? PHP7の登場など、最近登場した興味深い機能がいくつかありますが、このテクノロジーは数年前から注目されています。 これは言語自体に影響を与え、多くの開発者がPHPをscり始めました。
JavaScriptはコミュニティを共有します。 彼を愛する人と嫌いな人がいますが、フェンスに座っている開発者はほとんどいません。 ただし、Node.jsに対する回答は概ね肯定的であり、テクノロジーは波の頂点にあります。 これは、彼女が新しいためです。現時点では、Node.jsがこのラウンドで優勝しています。
審査員スコア-PHP 4:6 Node.js
- ブルーノ:あなたは確かに間違った場所を見ています。 PHPコミュニティは信じられないほど情熱的で、非常に活発です。 毎年20を超える主要な会議が開催されており、いくつかのすばらしいトピックで議論が行われています。 HHVMとPHP7の出現も感じています。 さらに、Node.jsの開発者は、6年の開発を経てもバージョン番号(執筆時点ではバージョンv0.12.5)を変更する方法をまだ学んでいないことがわかると面白いと思います。 重大ではあるが無視された古いバグと組み合わされた多くの未熟さは、オペレーティングシステム全体を撃退する可能性があります。 Node.jsは好きではありません。 Mozの敵意は、主にnpmで作業するときの否定的な経験に基づいています。 将来はすべてが変わる可能性がありますが、Node.jsをもう一度使用しなければならないとき、私は今恐怖と絶望に満ちています。 , , , . , . 誰にも聞かないでください。 — , , , . , , , , .
- : Node.js . Node.js-. , , , Node.js .
c :
サーバー側でどの言語を使用するかは問題ではありません。プロジェクトが中止された場合でも引き続き機能します。多くは引き続きPHPを使用しています。これは安全な賭けであり、そのサポートは今後20年間は自信があるようです。
ただし、Node.jsの上昇は迅速であったことがわかっています。開発に対する最新のアプローチは、クライアント側と同じ構文を使用するという点で明らかです。JavaScriptは、HTML5、Webソケットをサポートしています。Node.jsは必然的に市場シェアを奪いますが、PHPは、それが追いつくことを疑います。両方の技術には素晴らしい未来があります。このラウンドはドローで終了すると宣言します。
審査員スコア-PHP 5:7 Node.js
- ブルーノ:沈黙。
- ジェームズ:引き分けはこのラウンドの公正な結果でした。Node.jsは新星ですが、巨大なPHPは覆すことはできません。結論として、ツールがハンマーのようであれば、すべての問題が釘のように見えることを付け加えることができます。Node.jsは、各シナリオに理想的ではありません。実際、使用することは理にかなっています。ただし、Node.jsが悪い場合は、非常に優れています。情報に基づいた選択を行い、作業に最適なツールを選択できます。
絶対勝者
最終スコア5:7はNode.jsを支持します。Node.jsの学習曲線は急勾配であり、初心者の開発者には理想的ではありませんが、それでも成功します。シンプル。あなたが彼の言語を愛する有能なJavaScriptプログラマーなら、Node.jsはあなたを失望させません。あなたはより新鮮に感じ、解放的なウェブ開発体験を得るでしょう。ただし、PHPを削除しないでください。PHPは生きています。流行に似ているため、PHPに時流をかける理由はほとんどありません。PHPは習得が容易で、主なプラクティスであるプロのプログラミングテクニックを習得できます。PHPはサーバーへの展開が非常に簡単です。頑固なNode.js開発者でさえ、シンプルなサイトやアプリケーションにはPHPを使用すべきです。
私のアドバイス:オプションを評価し、要件に基づいて言語を選択します。これは、長所と短所に頼るよりもはるかに実用的です!