Die Funktion OB_Clean () löscht den Ausgangspuffer von PHP. Dieser Vorgang führt im Wesentlichen eine große Menge an Datenbewegungen und Löschen im Speicher durch, insbesondere wenn die Datenmenge im Puffer groß ist. Jedes Mal, wenn OB_CLEAN () aufgerufen wird, muss PHP den Inhalt im Puffer verwerfen und einen neuen Puffer für nachfolgende Ausgabematerial vorbereiten.
Speicherverbrauch: Wenn der Puffer gelöscht wird, verteilt PHP Speicherplatz für die Speicherung neuer Daten. Wenn das Speicher häufig gelöscht und neu zugefügt wird, wird unnötiger Speicheraufwand verursacht.
CPU -Belegung: Jedes Mal, wenn der Puffer gelöscht wird, muss PHP den Inhalt des Puffers verarbeiten, wodurch die Last der CPU, insbesondere in hohen Parallelitätsszenarien, erhöht wird und die Systemleistung beeinträchtigt.
Diese häufige Speicher- und CPU -Verwendung führt dazu, dass das Programm verlangsamt wird, insbesondere in großen Websites oder Anwendungen, und die Leistungsverschlechterung wird offensichtlicher.
Um Leistungsprobleme zu vermeiden, die durch häufige Aufrufe an Ob_Clean () verursacht werden, können wir aus den folgenden Aspekten optimieren:
PHP ermöglicht standardmäßig die Ausgabepufferung, was bedeutet, dass nicht alle Ausgaben sofort an den Browser gesendet werden, sondern zuerst im Speicher gespeichert sind. Wenn das Skript ausgeführt wird, sendet PHP den Inhalt im Puffer gleichzeitig an den Client.
Wir können die Größe des Ausgangspuffers steuern, indem wir den Parameter output_buffererung konfigurieren. Wenn Ihre Anwendung den Puffer nicht häufig reinigen muss, können Sie die Anzahl der Anrufe an ob_clean () reduzieren, indem Sie die Puffergröße erhöhen. Wenn Sie beispielsweise die Puffergröße erhöhen, können Sie mehr Zeit für die Verarbeitung von Daten im Skript geben, ohne den Puffer häufig zu reinigen.
<span><span><span class="hljs-title function_ invoke__">ini_set</span></span><span>(</span><span><span class="hljs-string">'output_buffering'</span></span><span>, </span><span><span class="hljs-number">4096</span></span><span>); </span><span><span class="hljs-comment">// Stellen Sie den Puffer auf4KB</span></span><span>
</span></span>
In vielen Szenarien müssen wir den Zeitpunkt des Ausgangs steuern, um eine häufige Pufferfreiheit zu vermeiden. Die Verwendung von OB_Clean () kann reduziert werden, indem der Ausgangszeitpunkt auf die Seite verzögert wird.
Nach dem Abschluss der gesamten Seitenverarbeitung kann der Pufferinhalt beispielsweise gleichmäßig ausgegeben werden, um das Löschen des Puffers bei jedem Verarbeiten der Daten zu vermeiden. Diese Methode kann die Leistung erheblich verbessern.
<span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>(); </span><span><span class="hljs-comment">// Ausgangspufferung einschalten</span></span><span>
</span><span><span class="hljs-comment">// Datenverarbeitung durchführen,Nicht gerufen ob_clean()</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"This is a test."</span></span><span>;
</span><span><span class="hljs-comment">// Endlich einheitlicher Ausgang</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ob_end_flush</span></span><span>();
</span></span>
In einer bestimmten Geschäftslogik ist es in der Tat notwendig, den Ausgangspuffer zu löschen. Wenn OB_CLEAN () jedoch häufig nur wegen unsachgemäßer Programmierung oder aufgrund einer falschen Logik bezeichnet wird, kann die Ausgabereihenfolge durch Anpassen der Codelogik vermieden werden. Machen Sie beispielsweise auf Anwendungsebene angemessene Bedingungen, um unnötige Reinigungsvorgänge zu vermeiden.
<span><span><span class="hljs-keyword">if</span></span><span> (condition_to_clean_buffer) {
</span><span><span class="hljs-title function_ invoke__">ob_clean</span></span><span>();
}
</span></span>
Wenn Sie in einigen Fällen nur den Inhalt des Puffers sofort an den Browser senden möchten, aber den Puffer nicht löschen, können Sie die Funktion von Flush () verwenden. Flush () sendet den Inhalt im Puffer an den Client, löscht jedoch den Inhalt des Puffers nicht, wodurch der Speicher und den CPU -Verbrauch verringert wird.
<span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>(); </span><span><span class="hljs-comment">// Ausgangspufferung einschalten</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Hello, world!"</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">flush</span></span><span>(); </span><span><span class="hljs-comment">// Senden Sie Inhalte an den Client,Aber nicht den Puffer löschen</span></span><span>
</span></span>
PHP liefert einen Ausgangskontrollmechanismus mit niedrigerer Ebene als ob_clean () , z . Diese Methoden können die Ausgangspufferung in bestimmten Szenarien genauer steuern und häufige Aufrufe an ob_clean () vermeiden.
<span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>();
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Some content"</span></span><span>;
</span><span><span class="hljs-variable">$content</span></span><span> = </span><span><span class="hljs-title function_ invoke__">ob_get_clean</span></span><span>(); </span><span><span class="hljs-comment">// Holen Sie sich und löschen Sie den Pufferinhalt</span></span><span>
</span><span><span class="hljs-comment">// Weiterer Betrieb $content,Vermeiden Sie es, den Puffer direkt zu beseitigen</span></span><span>
</span></span>