長年中国医学を実践してきた老医師として、私は今日、フロントエンドのページ表示が遅いという問題を解決する任務を与えられました。質問ページの状況は以下の通りです
apache + php
Smartyテンプレートを使用してコンテンツを出力します
ページの最終出力コンテンツは大きく、80k+
ページの実行時間が500ミリ秒を超えています
魔法の武器 xhprof を使用して問題のあるページを詳細に検査したところ、ページのボトルネックはテンプレート内の echo ステートメント (コンパイル後) であることが判明しました。この echo ステートメントによって出力される文字列は比較的大きいことが判明しました。 、約 50k バイト以上で、ページ全体の実行時間の 80% を占める 400 ミリ秒以上の時間がかかりました。この種のエコー出力は、実際にはサイトのホームページでは非常に一般的であり、データベース操作がなければ、実行時間はそれほど長くはなりません。
そこで、私は検索スキルを精力的に駆使し、最終的に PHP マニュアルのエコー部分でいくつかの手がかりを見つけました。によれば、2003 年の時点で、一部の先輩は、エコーを介してクライアントに大きな文字列を出力すると、サーバーでパフォーマンスの問題が発生すると考えていました。私のテストでは、このシナリオで print を使用すると、実際には同じくらい遅いです。推奨される解決策は、文字列をより小さな文字列に分割して出力することです。出力関数は次のようになります。 リーリー
しかし、上記の処方箋はあまり症状を示すものではなく、echobig 全体の出力時間は依然として約 400 ミリ秒であり、大きな改善はありません。大量のコンテンツをクライアントに出力するのが遅いことを考慮して、Apache の設定を確認したところ、圧縮のために deflate がオンになっていないことが判明したので、有効にしました。 xhprof を使用して再度確認すると、このエコーの出力時間は約 5ms に短縮されます。 400 ミリ秒から 5 ミリ秒では、構成の問題により 80 倍の差が生じ、実際にコストが節約されます。
この話は、圧縮出力をオンにすることが非常に重要であることを示しています。
興味がありそうな記事