PHP7のパフォーマンスを2倍にする鍵、php7_PHPチュートリアルのパフォーマンスを2倍にする鍵を教えます
PHP7 のパフォーマンスを 2 倍にする鍵、php7 のパフォーマンスを 2 倍にする鍵を理解しましょう
20 年の歴史を持つ Web プログラミング言語 PHP は、年末と同時に PHP 7 の新バージョンをリリースします。これは 10 年ぶりの大幅な改訂であり、以前のバージョンの PHP 5 に比べて 2 倍高速なパフォーマンスの大幅な進歩が特徴です。PHP の父であるラスムス・レルドルフ氏は、 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 の主要なアーキテクチャを放棄することはできなかったが、2 つの統合を検討したが、HHVM の使用には多くの制限があると述べました。 HHVM は Facebook や多くの開発者にとって非常に優れたツールですが、PHP プロジェクトの場合、HHVM の使用範囲は十分に広くなく、Facebook や Wikipedia などの特定のプロジェクトのニーズにしか満たせません。
PHP は厳密に型指定された言語ではないため、JIT にインポートするのはさらに困難です
しかし、PHP に 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 人の開発者によって主導されるべきではありません。古いプログラム コードは新しいプログラム コードに置き換えられるべきであり、他の開発者がこれを目指すべきだと信じています。」

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Ollama は、Llama2、Mistral、Gemma などのオープンソース モデルをローカルで簡単に実行できるようにする非常に実用的なツールです。この記事では、Ollamaを使ってテキストをベクトル化する方法を紹介します。 Ollama をローカルにインストールしていない場合は、この記事を読んでください。この記事では、nomic-embed-text[2] モデルを使用します。これは、短いコンテキストおよび長いコンテキストのタスクにおいて OpenAI text-embedding-ada-002 および text-embedding-3-small よりも優れたパフォーマンスを発揮するテキスト エンコーダーです。 o が正常にインストールされたら、nomic-embed-text サービスを開始します。

さまざまな Java フレームワークのパフォーマンス比較: REST API リクエスト処理: Vert.x が最高で、リクエスト レートは SpringBoot の 2 倍、Dropwizard の 3 倍です。データベース クエリ: SpringBoot の HibernateORM は Vert.x や Dropwizard の ORM よりも優れています。キャッシュ操作: Vert.x の Hazelcast クライアントは、SpringBoot や Dropwizard のキャッシュ メカニズムよりも優れています。適切なフレームワーク: アプリケーションの要件に応じて選択します。Vert.x は高パフォーマンスの Web サービスに適しており、SpringBoot はデータ集約型のアプリケーションに適しており、Dropwizard はマイクロサービス アーキテクチャに適しています。

PHP の配列キー値の反転メソッドのパフォーマンスを比較すると、array_flip() 関数は、大規模な配列 (100 万要素以上) では for ループよりもパフォーマンスが良く、所要時間が短いことがわかります。キー値を手動で反転する for ループ方式は、比較的長い時間がかかります。

C++ マルチスレッドのパフォーマンスを最適化するための効果的な手法には、リソースの競合を避けるためにスレッドの数を制限することが含まれます。競合を軽減するには、軽量のミューテックス ロックを使用します。ロックの範囲を最適化し、待ち時間を最小限に抑えます。ロックフリーのデータ構造を使用して同時実行性を向上させます。ビジー待機を回避し、イベントを通じてリソースの可用性をスレッドに通知します。

静的関数のパフォーマンスに関する考慮事項は次のとおりです。 コード サイズ: 静的関数にはメンバー変数が含まれないため、通常は小さくなります。メモリ占有: 特定のオブジェクトに属さず、オブジェクト メモリを占有しません。呼び出しオーバーヘッド: 低くなり、オブジェクト ポインターまたは参照を介して呼び出す必要がありません。マルチスレッド セーフ: クラス インスタンスに依存しないため、通常はスレッド セーフです。

さまざまな PHP 関数のパフォーマンスは、アプリケーションの効率にとって非常に重要です。パフォーマンスの良い関数には echo や print などがありますが、str_replace、array_merge、file_get_contents などの関数のパフォーマンスは低くなります。たとえば、str_replace 関数は文字列の置換に使用され、中程度のパフォーマンスを発揮しますが、sprintf 関数は文字列の書式設定に使用されます。パフォーマンス分析によると、1 つの例の実行にかかる時間はわずか 0.05 ミリ秒であり、関数が適切に実行されることが証明されています。したがって、関数を賢く使用すると、アプリケーションをより高速かつ効率的に実行できます。

Java 関数のパフォーマンスをベンチマークする方法は、Java Microbenchmark Suite (JMH) を使用することです。具体的な手順は次のとおりです。 JMH 依存関係をプロジェクトに追加します。新しい Java クラスを作成し、ベンチマーク メソッドを表す @State アノテーションを付けます。クラス内にベンチマーク メソッドを記述し、 @Benchmark アノテーションを付けます。 JMH コマンド ライン ツールを使用してベンチマークを実行します。

PHP では、配列からオブジェクトへの変換はパフォーマンスに影響を与え、主に配列のサイズ、複雑さ、オブジェクト クラスなどの要因によって影響を受けます。パフォーマンスを最適化するには、カスタム反復子の使用、不必要な変換の回避、配列のバッチ変換などの手法を検討してください。
