Bei der PHP -Entwicklung verbessern wir häufig die Seitenladegeschwindigkeit der Seiten, reduzieren die unnötige Ausgabe und verbessern die Cache -Steuerung. Viele Entwickler kennen jedoch nur mit ob_start () und ob_get_contents () , wissen jedoch nur sehr wenig über die Bedeutung, die ob_list_handlers () repräsentiert. In der Leistungsstimmung ist OB_LIST_HANDLERS () tatsächlich ein sehr aufschlussreiches Tool, mit dem wir den derzeit verwendeten Ausgangspufferprozessor verstehen und steuern können, wodurch potenzielle Leistungsengpässe entdeckt wird.
OB_LIST_HANDLERS () ist eine Funktion, die von PHP bereitgestellt wird, um die Namen aller aktuell aktivierten Ausgangspufferprozessoren zurückzugeben. Der Ausgangspufferprozessor ist eine Rückruffunktion, mit der die Ausgabedaten wie GZIP -Komprimierung, Zeichenersatz, Cache -Steuerung usw. verarbeitet werden können.
print_r(ob_list_handlers());
Die Ausgabe kann wie folgt sein:
Array
(
[0] => default output handler
[1] => ob_gzhandler
)
Dies bedeutet, dass Sie derzeit zwei Prozessoren aktivieren und ob_gzhandler der Prozessor für die GZIP -Komprimierung verwendet.
Manchmal überlagern Frameworks, Plugins oder benutzerdefinierte Code versehentlich mehrere OB_START () S , und diese Pufferschichten können dupliziert oder in Konflikt gebracht werden, was zu einer Leistungsverschlechterung führt. Mit OB_LIST_HANDLERS () können Sie schnell alle aktivierten Prozessoren auflisten und nach unnötigem Pufferstapel suchen.
if (in_array('ob_gzhandler', ob_list_handlers())) {
// Vermeiden Sie wiederholte Ergänzungen gzip Prozessor
ob_end_clean(); // oder ob_end_flush();
}
In einigen großen Systemen (z. B. CMS oder benutzerdefinierte MVC -Frameworks) ist der Ausgangsinhalt unerklärlicherweise modifiziert, verloren oder verstümmelt, normalerweise weil einige Pufferprozessoren den Ausgangsinhalt beeinträchtigen. Mit OB_LIST_HANDLERS () können Sie deutlich wissen, welche Prozessoren hinzugefügt werden, um schnell die Quelle des Problems zu finden.
foreach (ob_list_handlers() as $handler) {
error_log("Active output buffer: $handler");
}
Die Reihenfolge, in der der Ausgangspufferprozessor ausgeführt wird, beeinflusst die Leistung und die endgültigen Ausgabeergebnisse. Einige Prozessoren (z. B. GZIP -Komprimierung) sollten nach aller Ausgangsverarbeitung ausgeführt werden, da sie sich ansonsten auswirken. Wenn Sie sich die von OB_LIST_HANDLERS () zurückgegebene Bestellung ansehen, können Sie die Pufferschicht vernünftig anordnen.
Zum Beispiel:
ob_start('sanitize_output'); // AufräumenHTML
ob_start('ob_gzhandler'); // EndlichgzipKompression
Wenn die Ausgangsreihenfolge falsch ist, kann dies zum Kompressionsausfall oder zum HTML -Format zugelassen werden.
Einige Pufferprozessoren können der Ausgabe zusätzliche HTML -Kommentare, Debug -Informationen oder statistische Skripte hinzufügen. Wenn Sie die Seitenausgabe (z. B. das Schreiben in Redis oder Dateien) zwischenspeichern möchten, ist es sehr notwendig, OB_LIST_HANDLERS () vor dem Cache zu überprüfen, ob diese Prozessoren gereinigt werden müssen.
$handlers = ob_list_handlers();
if (in_array('debug_toolbar_output', $handlers)) {
ob_end_clean(); // Aufräumen调试信息
}
Sie können eine einfache Protokollierungsfunktion in der Debugging -Umgebung erstellen und verwenden OB_LIST_HANDLERS (), um alle Pufferprozessorinformationen auszugeben:
function log_output_buffers() {
$handlers = ob_list_handlers();
file_put_contents('/var/log/php_output_buffers.log', print_r($handlers, true));
}
Auf diese Weise können Sie das Protokoll schnell anzeigen, um die Quelle des Problems zu verstehen.
if (!in_array('ob_gzhandler', ob_list_handlers())) {
ob_start('ob_gzhandler');
}
ob_start(); // Hauptausgangspufferung
$pageContent = generatePage(); // Angenommen, dies ist eine Seitengenerierungsfunktion
// Speichern auf cache
file_put_contents('/tmp/cache.html', $pageContent);
// Ausgabeseite
echo $pageContent;
ob_end_flush();
OB_LIST_HANDLERS () ist keine Hochfrequenzfunktion, bietet jedoch unersetzliche Visualisierungsfunktionen in Bezug auf Leistungsabstimmungen, komplexes Ausgangsmanagement und Cache-Steuerungsszenarien. Durch sie können Sie:
Überprüfen Sie, ob eine entsprechende Komprimierung aktiviert ist (z. B. GZIP)
Vermeiden Sie Leistungsprobleme, die durch redundante Ausgangsprozessoren verursacht werden
Verbessern Sie die Steuerbarkeit des Systems für Ausgangsprozesse
Finden Sie schnell Ausgangsanomalien
Wenn Sie das nächste Mal vor unbekannten Ausgangs- oder Leistungs Engpässen ausgesetzt sind, können Sie auch mit OB_LIST_HANDLERS () beginnen, und Sie können unerwartete Gewinne erzielen.
Wenn Sie einen Hochleistungs-Webdienst wie https://gitbox.net/api/v1/data entwickeln, sollten Sie sich über den Ausgangsprozess bewusster sein. Die rationale Verwendung von OB_LIST_HANDLERS () ist ein zentraler Schritt zur hochwertigen Backend-Entwicklung.