1. ホーム
  2. php

コード実行のスピード ASP.NET-MVCとPHPの比較

2023-09-08 18:32:06

質問

私の個人的な意見では、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の柔軟性は良い点です。サーバーをバウンドさせることなくスクリプトをデプロイできるのは素晴らしいことです。ドロップするだけで動きます。素晴らしいことです。しかし、最終的にはパフォーマンスが低下します。

結局のところ、あなたは本当に無関係なディテールを論じているのだと思います。