PHP開発では、それを使用してページの読み込み速度を改善し、不必要な出力を減らし、キャッシュ制御を強化します。ただし、多くの開発者はob_start()およびob_get_contents()にのみ精通していますが、 ob_list_handlers()が表す意味についてはほとんど知りません。パフォーマンスのチューニングでは、 OB_LIST_HANDLERS()は、実際に使用されている出力バッファープロセッサを理解および制御するのに役立つ非常に洞察力のあるツールであり、潜在的なパフォーマンスボトルネックを発見します。
OB_LIST_HANDLERS()は、現在アクティブ化されているすべての出力バッファープロセッサの名前を返すためにPHPによって提供される関数です。出力バッファープロセッサは、 GZIP圧縮、キャラクター置換、キャッシュコントロールなど、出力データを処理できるコールバック関数です。
print_r(ob_list_handlers());
出力は次のとおりです。
Array
(
[0] => default output handler
[1] => ob_gzhandler
)
これは、現在2つのプロセッサを有効にしていることを意味し、 OB_GZHandlerはGZIP圧縮に使用されるプロセッサです。
フレームワーク、プラグイン、またはカスタムコードが誤って複数のOB_START()sをオーバーレイする場合があり、これらのバッファ層が複製または競合する可能性があり、パフォーマンスの低下になります。 OB_LIST_HANDLERS()を使用すると、すべての有効なプロセッサをすばやくリストし、不必要なバッファスタッキングを確認できます。
if (in_array('ob_gzhandler', ob_list_handlers())) {
// 繰り返しの追加を避けてください gzip プロセッサ
ob_end_clean(); // または ob_end_flush();
}
一部の大規模システム(CMSやカスタムMVCフレームワークなど)では、通常、一部のバッファプロセッサが出力コンテンツに干渉するため、出力コンテンツは不可解に変更、紛失、または文字化けされています。 OB_LIST_HANDLERS()を使用すると、どのプロセッサが追加されているかを明確に知ることができ、問題の原因をすばやく見つけることができます。
foreach (ob_list_handlers() as $handler) {
error_log("Active output buffer: $handler");
}
出力バッファプロセッサが実行される順序は、パフォーマンスと最終出力の結果に影響します。一部のプロセッサ(GZIP圧縮など)は、すべての出力処理の後に実行する必要があります。そうしないと、効率に影響します。 ob_list_handlers()によって返される注文を見ると、バッファ層を合理的にアレンジできます。
例えば:
ob_start('sanitize_output'); // 掃除HTML
ob_start('ob_gzhandler'); // ついにgzip圧縮
出力順序が正しくない場合、圧縮障害またはHTML形式の誤動作を引き起こす可能性があります。
一部のバッファプロセッサは、追加のHTMLコメント、デバッグ情報、または統計スクリプトを出力に追加する場合があります。ページの出力(Redisやファイルへの書き込みなど)をキャッシュする場合は、キャッシュ前にOB_LIST_HANDLERS()を使用して、これらのプロセッサをクリーニングする必要があるかどうかを確認する必要があります。
$handlers = ob_list_handlers();
if (in_array('debug_toolbar_output', $handlers)) {
ob_end_clean(); // 掃除调试信息
}
デバッグ環境で単純なロギング関数を作成し、 ob_list_handlers()を使用してすべてのバッファプロセッサ情報を出力できます。
function log_output_buffers() {
$handlers = ob_list_handlers();
file_put_contents('/var/log/php_output_buffers.log', print_r($handlers, true));
}
このようにして、生産環境でゆっくりと読み込まれたコードまたは文字化けコードが発生した場合、ログをすばやく表示して問題の原因を理解できます。
if (!in_array('ob_gzhandler', ob_list_handlers())) {
ob_start('ob_gzhandler');
}
ob_start(); // メイン出力バッファリング
$pageContent = generatePage(); // これがページ生成関数であると仮定します
// キャッシュに保存します
file_put_contents('/tmp/cache.html', $pageContent);
// 出力ページ
echo $pageContent;
ob_end_flush();
OB_LIST_HANDLERS()は高周波関数ではありませんが、パフォーマンスのチューニング、複雑な出力管理、およびキャッシュ制御シナリオにおけるかけがえのない視覚化機能を提供します。それを通してあなたはできます:
適切な圧縮が有効になっているかどうかを確認します(GZIPなど)
冗長出力プロセッサによって引き起こされるパフォーマンスの問題は避けてください
出力プロセスのシステムの制御性を向上させます
出力異常をすばやく見つけます
次回、不明な出力またはパフォーマンスのボトルネックに直面しているときは、 ob_list_handlers()から始めることもできます。また、予期しない利益が得られる場合があります。
https://gitbox.net/api/v1/dataなどの高性能Webサービスを開発している場合は、出力プロセスをもっと意識する必要があります。 OB_LIST_HANDLERS()の合理的な使用は、高品質のバックエンド開発の重要なステップです。