コード実行のスピード ASP.NET-MVCとPHPの比較
質問
私の個人的な意見では、ASP.NET-MVC でコンパイルされた Web アプリケーションは、PHP で書かれた同じプロジェクトよりも効率的/より速く実行されるだろうと思います。 私の友人は同意していません。
残念ながら、私は自分の主張を裏付けるのに使えるような確かなデータを持っていません。(彼もそうです)
これに対して、私は、彼の間違いを証明する証拠を見つけようと、グーグルで答えを探そうとしましたが、ほとんどの場合、議論は、どのプラットフォームで開発するのが良いか、コスト、セキュリティ機能などに変わってしまいました...。この議論のために、私は本当にそのようなことには関心がありません。
ASP.NETとMVCで開発されたWebサイトとPHPで開発されたまったく同じWebサイトの速度や効率について、stack overflowコミュニティがどう考えているかを知りたいのですが。
2 つの技術のパフォーマンスを比較する、実際のシナリオにおける実用的な例をお持ちの方はいらっしゃいますか?
(一部の人にとって、これは無関係で愚かな議論かもしれませんが、これは議論であり、ここ S.O. の素晴らしい人々の答えを聞きたいと思います)。
どのように解決するのですか?
それぞれのスタックの違いは、同じことをしても結局は違うということであり、比較のために同じことをしてもあまり現実的なテストにはならないので、比較は難しいです。
私が好きな PHP は、最も基本的な形態では、すべてのリクエストでロードされ、解釈され、そして捨てられます。 この点でCGIと非常によく似ています (これは、およそ15年前のものであることを考慮すると驚くことではありません)。
現在では、長年にわたって、パフォーマンスを向上させるためにさまざまな最適化が行われており、たとえば、APCによるオペコードキャッシュが最も有名です(APCは、現在のようにオプションモジュールではなく、PHP 6の標準部分になるほどのものです)。
しかし、まだ PHP スクリプトは基本的に一時的なものです。セッション情報は (通常) ファイルベースで、相互に排他的です (session_start() は session_commit() またはスクリプトが終了するまで、同じユーザーセッションにアクセスする他のスクリプトをブロックします) が、一方 ASP.NET ではそのようなことはありません。セッション データを除いて、ASP.NET (または ASP.NET がより似ている Java) ではアプリケーション コンテキスト内に存在するオブジェクトを持つことはかなり簡単です (そして正常です)。
これは重要な違いです。たとえば、PHPでのデータベースアクセス (mysql、mysqli、PDOなどを使用) は一時的です (持続的接続はともかく)。一方、.Net/Javaはほぼ常に持続的接続プールを使用して、この上に構築してORMフレームワークなどを作成し、そのキャッシュはどの特定のリクエストも超えています。
バイトコード解釈プラットフォームとして、ASP.NET は理論的にはより高速ですが、PHP ができることの限界は、ほとんどの人にとって無関係なほど高いものです。 たとえば、インターネット上のトップ 20 の訪問サイトのうち 4 つは PHP です。 開発速度、堅牢性、環境運用のコストなどは、理論的な速度の差よりも、規模を拡大し始めたときにはるかに重要になる傾向があります。
.Netはプリミティブ型、型安全性、そしてPHPが実行するよりも高速なコードを作成するこれらの種類のものを持っていることを心に留めておいてください。やや不公平なテストをしたいのであれば、100万個のランダムな64ビット整数の配列を両プラットフォームでソートしてください。 なぜなら、これらはプリミティブな型であり、単純な配列の方が PHP の連想配列よりも効率的だからです (PHP の配列は最終的にすべて連想配列です)。 さらに、32ビットOS上のPHPはネイティブの64ビット整数を持たないので、その分大変な思いをすることになります。
ASP.NETはプリコンパイルされているのに対し、PHPはオンザフライで解釈される (オペコードキャッシングを除く) という違いも指摘すべきですが、この点でのPHPの柔軟性は良い点です。サーバーをバウンドさせることなくスクリプトをデプロイできるのは素晴らしいことです。ドロップするだけで動きます。素晴らしいことです。しかし、最終的にはパフォーマンスが低下します。
結局のところ、あなたは本当に無関係なディテールを論じているのだと思います。
関連
-
[解決済み】 $_SERVER['DOCUMENT_ROOT'] と $_SERVER['HTTP_HOST'] の違いについて]
-
[解決済み】file_get_contents( )が動作しない。
-
[解決済み] ファイルアップロード ASP.NET MVC 3.0
-
[解決済み] ASP.NET MVC Frameworkで複数のサブミットボタンを処理する方法は?
-
[解決済み] ASP.NET MVCでenumからドロップダウンリストを作成するにはどうすればよいですか?
-
[解決済み] ASP.NET MVC - カスタムIIdentityまたはIPrincipalの設定
-
[解決済み] ASP.NET MVCでビューをコンパイルする
-
[解決済み] ELMAHをASP.NET MVCの[HandleError]属性で動作させる方法は?
-
[解決済み] リファレンス - このシンボルはPHPで何を意味するのですか?
-
[解決済み] ASP.NET MVCの非同期操作では、.NET 4のThreadPoolからスレッドを使用しますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] [Solved] Fatal error: メンバ関数prepare()のNULLでの呼び出し
-
[解決済み】予期せぬ例外。SQLSTATE[HY000] [1045] Access denied for user ****@'localhost' (using password: YES)
-
[解決済み】メンバ関数をnullで呼び出す?
-
[解決済み】foreach()に与えられた引数が無効です。)
-
[解決済み】 $_SERVER['DOCUMENT_ROOT'] と $_SERVER['HTTP_HOST'] の違いについて]
-
[解決済み] 入力ファイルが指定されていない
-
[解決済み】書き込みコンテキストでメソッドの戻り値を使用することができない
-
[解決済み] Uncaught Error: 未定義の関数 mysql_escape_string() の呼び出し。
-
[解決済み】phpのシンタックスエラー、予期しないT_IFエラーを修正する方法は?[クローズド]。
-
[解決済み] $_SERVER['DOCUMENT_ROOT'] と $_SERVER['HTTP_HOST'] の違いについて