web-dev-qa-db-ja.com

Hackで書かれたコードはHHVMのPHPで書かれたコードよりも速いですか?

PHPからHHVMのハックに移行することで速度の向上を期待できますか?

強く型付けされたパラメーター/戻り値の型、特にスカラーについて考えています。これにより、HHVMはコードをネイティブコードにコンパイルする際により良い仕事をすることができます。または、従来のPHPとその混合型?

27
Benjamin

数か月前にRedditでこれに答えました 。それ以来、世界の状況はあまり変わっていないので、以下に私の答えをコピーしました。ただし、HHVMはまだ進化を続けており、実際にはかなり急速に進化しているため、これは1、2か月で簡単に古くなる可能性があることに注意してください。

私はFacebookのハックチームで働いています。この質問への答えはやや微妙です。

他の人が言っているように、PHPコードをPHP5からHHVMに移動すると、大幅に高速化される可能性があります。どれだけ重要かは、多くの要因によって異なります。すでにIOバウンド、ほとんど表示されない場合があります。CPUバウンドに近い場合は、最大5倍のスピードアップが報告されていますが、その中間にある可能性があります。ぜひ試してみてください。独自のコードで、実際のワークロードで-HHVMには多くの要因があり、特に起動時間が長くなるため、マイクロベンチマークではうまく機能しませんが、実際のワークロードではPHP5よりもパフォーマンスが優れているはずです。最大限のメリットを得るには、コードをリファクタリングします。物事をトップレベルから関数/クラスに入れることは、セットアップと同様に、非常に役立ちます(トップレベルでコードをJITすることはできません) レポ権限モード

しかし、それは単純なことですPHP HHVMでは、HHVMではありません。コードをHackに変換すると、どの程度のスピードアップが得られますか?変換方法によって異なりますが、答えは次のとおりです。少なくとも今のところ、「それほど多くはありません」。すべてのファイルの先頭に<?hhではなく<?phpを貼り付けて、非互換性を修正する場合 実行すると発生しますtypechecker の場合、コードは以前と同じように実行される可能性が非常に高くなります。ハックとPHPコードのランタイム表現は同じであるため、実際にはあまり変更されていません。

ただし、そうすると、ハックを十分に活用できなくなります。入って型注釈の追加を開始すると、実行時にHHVMが使用する情報をどんどん増やしていくことができます。 このプロセスは、コードを高速化できるものです-HHVMは、以前は可能性があった多くの状況で、型に特化した(つまりより高速な)コードを生成できますタイプを推測することができませんでした。ここでも大幅な高速化は期待しないでください。これは現時点ではほとんど理論上のものであり、型情報を活用してより高速なコードを生成できる場所はたくさんあります。 (たとえば、現時点では、実行時の戻り値の型についてはあまり使用していません。)しかし、これは役立つ可能性のある部分であり、HHVMがよりスマートになるにつれてさらに役立つ可能性があります。

ただし、もちろん、実行速度はハックのポイントではなく、開発者の効率に関するものであることに注意してください。パフォーマンスの向上は、おそらくHHVMのPHPからHHVMのハックに移行する価値はありません。ただし、開発者の生産性の向上はおそらくそうです。

では、PHP5からHHVMに移行すると、コードが高速化されますか?可能性が非常に高い。ハックにすばやく変換するとスピードアップしますか?いいえ。タイプアノテーションを追加するとスピードアップしますか?少しかもしれませんが、将来はもっと増えるかもしれませんが、それは実際には重要ではありません。

60
Josh Watzman