CodeIgniter などの PHP Web フレームワークを使用して Hello World アプリを作成し、それをコンパイルして HipHop を使用して実行するとします。同じ Hello World アプリを django や rails で書いた場合よりも速く実行できますか?
6 に答える
HIPHOP は、php コードを C++ コードに変換します。このコードは、実行するためにコンパイルする必要があります。事前にコンパイルされたコードはより高速に実行され、メモリの使用量が少ないため、python/php などのスクリプト言語よりも、指定した例ではおそらく高速に実行されます。
ただし、HIPHOP はすべてのコードを変換するわけではありません。PHP のコードの多くは動的であり、C++ に変更することはできません。これは、これを念頭に置いてコードを作成する必要があることを意味します。HIPHOPを使用してcodeigniterをコンパイルできるかどうかは別の問題です。
Terry Chay は HIPHOP について大きな記事を書いており、HIPHOP をいつ使用するか、制限と将来について説明しています。これを読むことをお勧めします。おそらくほとんどの質問に答え、それがどのように機能するかについての洞察を与えるでしょう:)
私はジャンゴやレールについて知らないので、これは少し話題から外れています。
普通の php では、リクエストは apache に送られ、次に mod_php に送られます。mod_php はディスクから helloworld.php スクリプトをロードし、それを解析してトークン化し、バイトコードにコンパイルしてから、バイトコードを解釈し、出力を apache に渡し、apache がそれをユーザーに提供します。
php とオプティマイザを使用すると、最初の実行は通常の php とほぼ同じですが、コンパイルされたソース コードは RAM に保存されます。次に、2 番目の要求: apache に移動し、apache から mod_php に移動し、apc が RAM からバイトコードをロードして解釈し、それを apache に戻し、ユーザーに戻します。
Hiphop には apache はありませんが、hiphop 自体にはインタプリタがないため、リクエストは直接 Hiphop に送られ、ユーザーに返されます。はい、いくつかの理由により、より高速です。
- バイトコードのコンパイルが不要なため、起動が高速になります。プログラムは既に機械可読コードになっています。そのため、リクエストごとのコンパイルやソース ファイルの読み取りはありません。
- 通訳なし。マシン コードは必ずしも高速ではありません。これは、ソース変換 (hiphop) の品質と静的コンパイラ (g++) の品質に依存します。Hiphop に変換されたコードは、手書きの C コードに比べて高速ではありません。これは、型の処理などによるオーバーヘッドが少しあるためです。
node.js では、Apache もありません。スクリプトが開始され、マシンコードに直接コンパイルされます (V8 コンパイラーがそれを行うため)。つまり、AOT (事前) コンパイルのようなものです (または、まだ JIT と呼ばれていますか?私にはよくわかりません)。すべてのリクエストは、コンパイル済みのマシンコードによって直接処理されます。したがって、node.js は実際にはヒップホップに非常によく似ています。ノードがイベント化されたIOを実行している間、ヒップホップはマルチスレッドまたはこのようなものであると想定しています。
facebook は 50% の速度向上を主張していますが、実際にはそれほど多くはありません。言語の銃撃戦の結果を比較すると、各種アルゴリズムの実行速度がphp の方が 5 倍から 250 倍遅いことがわかります。
では、なぜ 50% しかないのでしょうか。なぜなら ...
- Web アプリは実行速度だけでなく、IO などにも依存します。
- PHP の型システムは、ヒップホップが C++ の静的型を最大限に活用することを妨げています。
- 実際には、多くの php はすでに C です。機能のほとんどが組み込みか、拡張機能から来ているためです。拡張機能は C でプログラムされ、静的にコンパイルされます。
hello world のパフォーマンスが大幅に向上したかどうかはわかりません。hello world は、優れたフレームワークを使用しても、実行速度が他のすべてのオーバーヘッド (ネットワーク遅延など) と比較して無視できるほど小さいためです。
imo: 速度と使いやすさが必要な場合は、node.js を使用してください :)
その時点で、実行時間は重要ではありません。HipHop は、数十億のリクエストをスケーリングするために設計されました。中規模の Web サイトであっても、HipHop のようなものを使用する必要はまったくありません。
しかし、あなたの質問の要点は...私たちが見ることができる比較チャートがあったとは思いませんが、そのレベルで実行時間が速くなるとは思えません。
単純なアプリケーションの実行は、どの言語でも常に高速です。Facebookのように複雑になると、多くの問題に直面することになります。PHPの遅さは、その顔を示します。同時に、既存のコードを別の言語に変換することはオプションではありません。すべてのロジックとコードを他の言語の構文に翻訳するのはそれほど簡単ではないからです。そのため、Facebook開発者は古いコードを保持し、PHPを高速化することにしました。それが彼らがHipHopと呼ばれる独自のPHPコンパイラを作成する理由です。
Facebook開発者の視点からこのストーリーを読んで、HipHopの歴史を知ってください。
それは実際にはリンゴとリンゴの比較ではありません。最も公平な競技場では、次のようなものがあります。
- Apacheの背後で実行されるDjango
- Django が HTML テンプレートをレンダリングして hello world を表示する (キャッシュなし)
と
- Apache の背後で実行される HPHP
- HPHP は、Hello World と言うために HTML テンプレートをレンダリングします (ここでも、キャッシュはありません)。
データベースはなく、ファイル I/O もキャッシュもほとんどありません。さまざまな同時実行レベルでロード ジェネレーターを使用してページに 10,000 回アクセスすると、おそらく HPHP が Django や Rails よりも優れていることがわかります。
問題は、これほど多くの同時ユーザーが存在することになるでしょうか? もしそうなら、彼らはデータベースやキャッシュされたページにアクセスする可能性がありますか?
HPHP はクールに聞こえますが、私見では、すぐに出荷する理由はありません (大量のトラフィックが発生している場合を除きます。その場合は、確認するのが理にかなっている可能性があります)。