ホームページ >バックエンド開発 >PHPチュートリアル >BlackFireによるPHPレベルのパフォーマンス最適化

BlackFireによるPHPレベルのパフォーマンス最適化

Joseph Gordon-Levitt
Joseph Gordon-Levittオリジナル
2025-02-08 08:59:10828ブラウズ

Blackfire:ホームステッドのパフォーマンスのボトルネックのピンポイントと修正改善アプリケーション

PHP-level Performance Optimization with Blackfire

重要な洞察:

  • Blackfireは、アプリケーションでパフォーマンスのボトルネックを特定して解決するための強力なツール、特にHomesteadが改善されたツールです。
  • ブラックファイアのグラフ(参照プロファイル、排他的時間、包括的時間、ホットパス、ホットパス)を理解することは、過度のメモリ使用、CPU時間、または全体的なアクティビティなどです。 この記事では、マルチイメージギャラリーのブログを最適化するためのBlackfireのアプリケーションを紹介しています。 パフォーマンスを高めるためのボトルネック(例:pdoexecute)の識別とソリューションの実装(ページネーションなど)を強調しています。 BlackFireによる継続的なパフォーマンステストは、アプリケーションのライフサイクル全体を通して不可欠です。これらのテストをCI/CDパイプラインに統合すること(BlackFireのプレミアムプランが提供する機能)は、効率を大幅に向上させます。
  • (この記事は、パフォーマンスベンチマークと最適化のためのサンプルマルチイメージギャラリーブログアプリケーションの構築に関するシリーズの一部です。リポジトリにアクセスしてください。)
  • この投稿は、Blackfireの以前の紹介に基づいて構築され、パフォーマンスの問題を特定して解決するための実用的なアプリケーションを示しています。 それを使用して、サンプルプロジェクトを分析し、すぐに改善するための領域をターゲットにします。 Homesteadの改善(推奨)を使用している場合は、BlackFireをすでに設定する必要があります。 以前のブラックファイヤーの知識は必要ありません。

ブラックファイアメトリックの理解:

開始する前に、Blackfireのパフォーマンスグラフで使用されている重要な用語を定義しましょう:

リファレンスプロファイル:アプリケーションの初期パフォーマンスベースライン。その後のプロファイルは、このベースラインと比較され、改善を測定します。

排他的時間:

特定の関数/メソッドのみで費やされる時間は、呼ばれる関数に費やされる時間を除きます。
  • インクルーシブ時間:関数の実行に費やされた合計時間。
  • ホットパス:プロファイリング中のアプリケーションの最もアクティブな部分であり、多くの場合、リソース消費量が高い(メモリまたはCPU)。
  • Blackfireのセットアップ:
  • BlackFireアカウントを作成します。 アカウントページには、
  • を構成するために必要なトークンとIDが提供されます。 ファイルには、下部にプレースホルダーが含まれています
  • これらの行を外し、プレースホルダーの値をアカウントの詳細に置き換えます。
  1. BlackFire Chrome拡張機能をインストールします。この拡張機能は主に手動プロファイリングに使用されますが、これはほとんどのシナリオで一般的です。 その他の統合が利用可能です(こちらの完全なリストを参照)。

Blackfireで最適化:ケーススタディ

ホームページにベンチマークします。これは、あらゆるWebサイトの重要なページです。ここでの読み込み時間の遅い時間は、ユーザーエクスペリエンスと跳ね返りに直接影響します。他のページ(例:画像アップロード)をテストすることができますが、読み取りパフォーマンスは通常、書き込みパフォーマンスよりも優先されます。

最初のアプリは、すべてのギャラリーを年齢ごとにロードおよびソートします。 プロファイルするには、ホームページを開き、[ブラックファイア拡張]ボタンをクリックして、「プロファイル!」を選択します。

初期プロファイルの結果:

グラフは、

が包括的時間の100%を消費していることを明らかにしており(濃いピンクのセクション)、それが主要なボトルネックであることを示しています。 他の方法では、より大きな淡いピンクのバー(包括的時間)が表示される場合がありますが、これらは従属関数の累積時間を表しています。 濃いピンクのセクションは、すぐに注意が必要な関数を表しています。

RAMモードに切り替えると、TwigレンダリングがRAMの過半数(約40MB)を消費することが示されています。これは、大量のデータがレンダリングされていることを考えると予想されます。 PDOExecute

ホットパス(厚い境界線)は、ボトルネックを明確に強調しています。 集中的なノード(時間を費やしたノード)は、ホットパスの直接の一部ではない場合でも、問題を示すことができます。

分析では、PHP-level Performance Optimization with Blackfire および

(高いRAMの使用)がホームページにすべてのギャラリーをロードすることによって引き起こされることが明らかになりました。解決策:ページネーションを実装します。

ページネーションの実装:PDOExecuteunserialize

a 定数を

に追加し、12のような値に設定します。
  1. ギャラリーのフェッチング手順を変更して、ページネーションを使用してください:PER_PAGE HomeController

  2. 怠zyな読み込みのためのホームビューにjavascriptを追加します:

<code class="language-yaml"># blackfire:
#     - id: foo
#       token: bar
#       client-id: foo
#       client-token: bar</code>
    怠zyなロードギャラリーのために
  1. に新しい方法を追加:
<code class="language-php">$galleries = $this->em->getRepository(Gallery::class)->findBy([], ['createdAt' => 'DESC'], self::PER_PAGE);</code>
  1. パフォーマンスの比較:HomeController
ページネーションを実装した後にプロファイラーを再実行すると、大幅な改善が得られます:
<code class="language-html+php">{% block javascripts %}
    {{ parent() }}

    
{% endblock %}</code>

メモリの使用量は10倍減少し、読み込みはほぼ瞬時です。 新しいボトルネックは、開発環境の結果です。生産モードに切り替えると、パフォーマンスがさらに向上します:DebugClass

結論:

アプリケーションのパフォーマンスは劇的に改善され、ページの読み込み時間は58msになります。 さらなる最適化は最小限です。 BlackFireを使用した定期的なパフォーマンステストは非常に重要であり、CI/CDパイプライン(BlackFireのプレミアムプランで利用可能)に統合することを強くお勧めします。

PHPパフォーマンスの最適化に関するよくある質問(FAQ):

提供されたFAQセクションは、一般的にPHPのパフォーマンスの最適化に関連する貴重な情報を提供するため、ほとんど変わらないままです。 監視ツール、一般的な問題、最適化技術、スケーラビリティ、ベストプラクティスなどのトピックを正確にカバーしています。

以上がBlackFireによるPHPレベルのパフォーマンス最適化の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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