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