PHPとNode.js

これは、クレイグバックラーの記事「SitePoint Smackdown:PHP vs Node.js」と、クラックバックラーの記事のジェームズヒバードのブルーノシュクヴォルクの判断の翻訳です。



翻訳者から



このテーマに関する定性的特性分析とパフォーマンス予測に関する記事が多数あります。 ただし、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についてお話します。





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





ラウンド2:ヘルプとサポート



実際、コースや現代の実践を勉強せずに知識を学ぶことはできません。開発するには、StackOverflowなどのフォーラムで質問する必要があります。 PHPはこのラウンドで簡単に勝ちます。php.netに優れたガイドがあり、20年にわたるよくある質問があります。 あなたが何をするにしても、誰かがこの問題に遭遇し、あなたのためにそれを解決しようとしました。



Node.jsには優れたドキュメントがありますが、テクノロジーはかなり新しいため、フォーラムでの回答が大幅に少なくなります。



審査員スコア-PHP 2:0 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







ラウンド4:開発者ツール



どちらのテクノロジーにも、エディター、統合開発環境、デバッガー、バリデーター、その他のツールが豊富に揃っています。 ここでドローを与えることができますが、Node.jsには優れたツールがあります。npmはパッケージマネージャーであり、モジュールと依存関係を管理できます。



PHPには、npm-Composerの影響下で開発された独自のパッケージマネージャーがあります。 ただし、npmがデフォルトでビルドされる場合、そのコンポーザーは独自にビルドする必要があります。 npmのおかげで、GulpとGruntはフロントエンドプロジェクトの構築に広く使用されています。



審査員スコア-PHP 2:2 Node.js







第5ラウンド:水曜日



これらのテクノロジーはどこで使用できますか? それらを展開する方法は? どのプラットフォームがサポートされていますか? Web開発者は、多くの場合、Webにのみ関連するアプリケーションを作成する必要があります。たとえば、オンラインサービスの開発、データ変換スクリプトなどです。



PHPでは、デスクトップアプリケーションまたはコンソールユーティリティを開発できますが、ほとんどの場合、PHPはサーバー側で必要であり、この境界を超えることはめったにありません。



数年前、JavaScriptはブラウザ専用に使用されていました。 Node.jsの登場により、デスクトップおよびモバイルアプリケーションを作成でき、マイクロコントローラーをプログラミングすることもできます。 Node.jsはJavaScriptの境界を拡大しました。



審査員スコア-PHP 2:3 Node.js







第6ラウンド:統合



データベースおよびドライバーと統合できない限り、開発テクノロジーは制限されます。 PHPはこの分野で強力です。 開発は長年にわたって行われており、そのシステム拡張により、APIを使用するすべてのホストで直接作業することができます。



Node.jsはすぐに追いつきますが、古いもののための最新の統合コンポーネントを見つけるのはかなり困難です。



審査員スコア-PHP 3:4 Node.js





第7ラウンド:ホスティングと展開



新しいアプリケーションを実際のWebサーバーに簡単に展開できますか? PHPのもう1つの明確な勝利があります。 インターネットホスティングはすべてPHPをサポートしています。 MySQLデータベースをお買い得価格で入手できます。 ここでは、PHPはサンドボックス(ローカルサーバー)よりもはるかに単純であり、どのPHP拡張機能が無効になっているか、および無効になっていないかが正確に通知されます。



Node.jsは完全に異なる獣であり、接続を切断することなくサーバー側で常に機能します。 そのためには、専用のホスティングサービスを探す必要があります。 仮想クラウド(VDS / VPS、サーバー環境、フルアクセス)が必要になります。 残念ながら、すべてのホスティング事業者がこれを購入できるわけではないため、価格はそれに応じて異なります。



審査員スコア-PHP 4:4 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







9回目:プログラミングへの情熱



比較するのは少し難しいですが、言語自体に情熱を傾けるPHP開発者は比較的少数です。 PHPで最後に記事を読んだのはいつですか? おそらくすべてが言われた? たぶん面白くないですか? たぶんあなたは正しい場所を見ていませんか? PHP7の登場など、最近登場した興味深い機能がいくつかありますが、このテクノロジーは数年前から注目されています。 これは言語自体に影響を与え、多くの開発者がPHPをscり始めました。



JavaScriptはコミュニティを共有します。 彼を愛する人と嫌いな人がいますが、フェンスに座っている開発者はほとんどいません。 ただし、Node.jsに対する回答は概ね肯定的であり、テクノロジーは波の頂点にあります。 これは、彼女が新しいためです。現時点では、Node.jsがこのラウンドで優勝しています。



審査員スコア-PHP 4:6 Node.js





c :



サーバー側でどの言語を使用するかは問題ではありません。プロジェクトが中止された場合でも引き続き機能します。多くは引き続きPHPを使用しています。これは安全な賭けであり、そのサポートは今後20年間は自信があるようです。

ただし、Node.jsの上昇は迅速であったことがわかっています。開発に対する最新のアプローチは、クライアント側と同じ構文を使用するという点で明らかです。JavaScriptは、HTML5、Webソケットをサポートしています。Node.jsは必然的に市場シェアを奪いますが、PHPは、それが追いつくことを疑います。両方の技術には素晴らしい未来があります。このラウンドはドローで終了すると宣言します。



審査員スコア-PHP 5:7 Node.js





絶対勝者



最終スコア5:7はNode.jsを支持します。Node.jsの学習曲線は急勾配であり、初心者の開発者には理想的ではありませんが、それでも成功します。シンプル。あなたが彼の言語を愛する有能なJavaScriptプログラマーなら、Node.jsはあなたを失望させません。あなたはより新鮮に感じ、解放的なウェブ開発体験を得るでしょう。ただし、PHPを削除しないでください。PHPは生きています。流行に似ているため、PHPに時流をかける理由はほとんどありません。PHPは習得が容易で、主なプラクティスであるプロのプログラミングテクニックを習得できます。PHPはサーバーへの展開が非常に簡単です。頑固なNode.js開発者でさえ、シンプルなサイトやアプリケーションにはPHPを使用すべきです。



私のアドバイス:オプションを評価し、要件に基づいて言語を選択します。これは、長所と短所に頼るよりもはるかに実用的です!



All Articles