ホームページ  >  記事  >  バックエンド開発  >  PHP7のパフォーマンスを2倍にする鍵を詳しく解説

PHP7のパフォーマンスを2倍にする鍵を詳しく解説

*文
*文オリジナル
2018-01-05 13:14:441742ブラウズ

この記事は主に、PHP7 のパフォーマンスを倍増させるための鍵を理解するのに役立つ関連情報を紹介します。必要な方は参考にしてください。お役に立てれば幸いです。

PHP 7 は 10 年ぶりのメジャーリビジョンで、最大の特徴は、以前のバージョンの PHP 5 に比べて 2 倍高速になる可能性があるということです。 HHVM 仮想マシンでは PHP よりも高速です。プログラムのパフォーマンスは高速です。

HHVM は Facebook が独自の Web サイトの特性に合わせてカスタマイズした PHP 最適化メカニズムであり、どの Web サイトにも適用できるわけではありません。しかし、Rasmus Lerdorf氏は、新バージョンの目標の1つは、開発フレームワークDrupalやオープンソースの電子商取引システムOpencartを使用している場合でも、Webサイト開発者がHHVMテクノロジーを使用しているのと同じパフォーマンスを発揮できるようにすることだと述べた。新バージョンのリリース前夜、彼は機会を利用して台湾を訪れ、PHPConf 台湾年次会議に出席し、PHP 7 のパフォーマンスの飛躍的進歩の鍵を共有しました。

過去 20 年間に多くの改訂と無数の最適化を経てきた成熟した言語の場合、通常の新しいプロジェクトとは異なり、パフォーマンスを 2 倍にするブレークスルーを見つけるのは簡単ではないと、Rasmus Lerdorf 氏は率直に述べました。新しいバージョンの PHP では、一部のプログラムを変更するだけではこのような結果は得られません。逆にPHP 7は細かな最適化と性能の蓄積を重ねた結果、HHVMと比べても遜色ない実行性能を持っています。

Rasmus Lerdorf と PHP コア貢献チームは、プログラムの実行時に移動されるメモリ ビット数を削減するために多大な努力を費やし、それによって実行パフォーマンスを高速化しました。例えば、PHP の変数を格納するデータ構造 zval は 24 ビットから 16 ビットに削減され、Hashtable は 72 ビットから 56 ビットに削減され、パフォーマンスに改善の余地があるかどうかが検討されます。

メモリ使用量の削減に加えて、Rasmus Lerdorf 氏は、CPU のキャッシュ ラインの動作原理も調べて、プログラム コードが CPU とどのように対話するか、コンパイラーが新しい CPU アーキテクチャの下でプログラム コードをコンパイルする方法、およびその他の詳細を理解しました。 PHP 7 プログラムのコードは、最新の CPU のアーキテクチャに準拠しています。各プロジェクトの最適化によるパフォーマンスへの寄与は 0.5% 未満ですが、最適化プロジェクトの数が多かったり、特定の改善された関数がアプリケーションによって繰り返し呼び出されたりするため、修正の全体的な効果はこれほど大きな改善になる可能性があります。

HHVM に触発されて、パフォーマンスと機能の両方を備えた PHP を作成することにしました

PHP の動作を最適化するために、Facebook は JIT コンパイルを使用して仮想マシン HHVM を作成しました。 HHVM は高速な実行パフォーマンスを備えていますが、特定の目的に最適化された設計は少数の開発者しか満足できません。それどころか、Rasmus Lerdorf 氏は、PHP のパフォーマンスを向上させるだけでなく、ハイエンド ユーザーとアマチュア ユーザーのニーズにも同時に応えたいと考えており、PHP 7 をパフォーマンスと一般的な機能の両方を備えたプログラミング言語にしたいと考えています。

しかし、市場の少数の人々のニーズを満たすプログラミング言語を開発することは難しくありません。しかし、PHP プロジェクトは多くのターゲットを目指しており、アマチュアユーザーとプロの開発者のニーズを同時に満たさなければなりません。一部のグループのニーズには応えられないため、すべてを開発するのは困難です。「これは、広範囲に水道管を噴射するようなものです。全員の服が少し濡れることはありますが、完全に濡れる人はいません。 」とラスムス・レルドルフ氏は語った。

外部フレームワークを使用しない場合の PHP のコンピューティングパフォーマンスは非常に優れていますが、外部フレームワークの影響により、本来は数秒で数千の Web ページリクエストを処理できる PHP のパフォーマンスが大幅に低下しました。数十のリクエストしか処理できません。 Rasmus Lerdorf 氏は、HHVM が登場する前、ユーザーは PHP のパフォーマンス要件よりも、PHP が Web 開発の困難さを軽減できるかどうかに関心があり、これらのフレームワークによって開発者の作業が容易になると述べました。しかし、Facebook が HHVM を発表した後、PHP のパフォーマンスを重視する多くのユーザーを魅了したため、Rasmus Lerdorf 氏は、多くのユーザーがパフォーマンスを必要としていることに気づきました。彼は、HHVM の JIT アーキテクチャを PHP と統合する方法について考え始めました。

しかし、Rasmus Lerdorf 氏は、PHP と HHVM はアーキテクチャ設計においてまったく異なり、たとえば、HHVM のマルチスレッド アーキテクチャはあまり安定していないと述べました。さらに、HHVM の移植性は良くなく、PHP は Windows 環境で開発している開発者が多く、HHVM はそれらのユーザーをサポートできません。

Rasmus Lerdorf 氏は、PHP の主要なアーキテクチャを放棄することはできないと述べましたが、HHVM の使用には多くの制限があります。 HHVM は Facebook や多くの開発者にとって非常に優れたツールですが、PHP プロジェクトの場合、HHVM の使用範囲は十分に広くなく、Facebook や Wikipedia などの特定のプロジェクトのニーズにしか満たせません。

強く型付けされた言語ではない PHP では、JIT をインポートするのはさらに困難です

しかし、PHP に JIT コンパイルを追加することは非常に困難です。ラスムス・ラードルフ氏は、JITはどの部分が重要なプログラムコードであるかを理解し、プログラムがいつ呼び出されるか、またはプログラムが呼び出される前にプログラムのどの部分が呼び出されるかを予測するなど、プログラムの動作パターン(パターン)を特定することを学習する必要があると述べた。走る。

ラスムス・レルドルフ氏は、多くの車において、JIT は車のどの部分が右折するか、どの部分が左折するか、または特定の色の車が直進するかを予測できなければならない、と述べました。「そして JIT はすべてを予測しなければなりません。」正しくなければ、パフォーマンスが大幅に低下します。「ただし、予測が正しければ、プログラムの実行パフォーマンスは大幅に向上します。

一般的なプログラミング言語のコンパイルに JIT を追加するのは簡単ではありません。Rasmus Lerdorf 氏は、PHP の動的な性質のため、JIT を追加するのはさらに難しいと述べました。たとえば、開発者はパラメータ $a の値を 1 と宣言しましたが、パラメータ値は PHP で簡単に再定義できるため、プログラム内のすべての $a の値が 1 であることを意味するわけではありません。 C 言語では、開発者がパラメータ a を整数として宣言すると、a は常に整数になります。プログラムのどこかで a が整数以外の型であると宣言されている場合、コンパイルすらできなくなります。また、C 言語は厳密に型指定されたプログラミング言語であるため、「JIT は変数 a が整数であることを予測できますが、PHP ではそのような余裕はありません。HHVM のアプローチは、JIT が a が整数であることを学習することであると説明しました。」 type 以降は、a は常に整数であると見なされます。

JIT コンパイルを使用するために、HHVM は PHP の開発をある程度制限しています。 HHVM のユーザーは変数の性質を明確に宣言する必要がありますが、PHP を使用する開発者は、最初に性質なしでカテゴリ (クラス) を宣言し、次にクラスの変数属性を指定できます。 「いかなる制限もなく、PHP に JIT を追加することが私たちがしなければならないことです。PHP は WordPress、Drupal、その他のフレームワークの開発者を考慮する必要があり、これらのフレームワークのサポートを恣意的に停止することはできません」と同氏は述べました。したがって、HHVM と比較して、PHP では JIT の作成に関する制限が増えます。

しかし、「これは、JIT ができないという意味ではありません。さらに、PHP の開発方向もコントロールする必要があります。」と Rasmus Lerdorf 氏は言いました。

現在、PHP の中心的な貢献者の 1 人である Dmitry Stogov は、プロトタイプの JIT を開発し、いくつかの実験的アプリケーションを使用して動作をテストしています。 Rasmus Lerdorf 氏は、この JIT を特定の反復操作やループ プログラムの実行に使用すると、PHP 7 のパフォーマンスを 10 倍高速化できると述べました。

しかし、彼は、この実験的な JIT を WordPress で使用したとき、加速効果が得られなかったことも認めました。「私たちが作りたい JIT は、大学の教科書で習うものではなく、現実の世界で動作するものです。 「ジット」と彼は言いました。なぜなら、PHP は常にそのような理想を持ち、教科書上の理論だけでなく、人々の生活や現実世界のオンライン環境で問題を解決しようと努めてきたからです。

Rasmus Lerdorf 氏は、PHP が初めて登場したとき、PHP の開発に 1 日に少なくとも 16 時間を費やしたと述べました。しかし現在、彼は開発への投資を徐々に減らし、その代わりに世界中での宣伝や講演にエネルギーを注いでいます。彼は冗談めかして、「自分で開発するよりも、私よりはるかに賢くて、1 日 18 時間費やしてプログラムを書いて PHP を開発する人たちにインスピレーションを与えるほうが良い」と語った。彼が書いた PHP の 1 行のプログラミング コードは、「成長するプロジェクトは 1 人の開発者によって主導されるべきではありません。古いプログラム コードは新しいプログラム コードに置き換えられるべきであり、他の開発者がこれを目指すべきだと信じています。」

関連する推奨事項:

PHP が操作可能な検証コードを実装する方法の詳細な説明

PHP がファイル検索を実装する方法の詳細な説明

PHP がどのように対応ウェブユーザーの言語に応じたページ

以上がPHP7のパフォーマンスを2倍にする鍵を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。