Bei der Entwicklung von PHP-Anwendungen, insbesondere Szenarien, die einen Echtzeitdatenfluss beinhalten, wie z. Standardmäßig sendet PHP nach Ausgabe aller Daten nur an den Browser, wodurch die Webseite langsam geladen wird, insbesondere wenn das Datenvolumen groß ist oder die Echtzeitleistung stark ist. Um dies zu optimieren, können wir die OB_FLUSH -Funktion verwenden, um eine sofortige Ausgabe zu erzielen, die Latenz zu reduzieren und die Glätte der Webseite zu verbessern.
OB_FLUSH () ist eine Ausgangspuffersteuerfunktion von PHP. Es wird verwendet, um den Inhalt des Ausgangspuffers zu spülen und die Daten im Puffer zum Browser zu erzwingen, anstatt zu warten, bis das Skript vor dem Senden ausgeführt wird. Normalerweise speichert PHP alle Ausgaben im Puffer im Standardmodus und wird nach Ausführung des Skripts an den Browser gesendet. Dieser Mechanismus kann die Leistung verbessern, aber in einigen Szenarien, in denen Echtzeitausgabe erforderlich ist, können unnötige Verzögerungen erzeugt werden.
Durch die Verwendung von OB_FLUSH () können Sie manuell steuern, wenn die Daten im Puffer an den Browser gesendet werden, wodurch die Benutzererfahrung in Echtzeit aktualisiert und verbessert wird.
Um OB_FLUSH verwenden zu können, müssen Sie zunächst sicherstellen, dass die Ausgabepufferung aktiviert ist. Der Ausgangspuffer kann mit OB_Start () gestartet und dann in Echtzeit über OB_FLUSH () ausgegeben werden. Ein typischer Prozess ist wie folgt:
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// Ausgangspufferung starten</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>();
</span><span><span class="hljs-comment">// Analoge Datenausgabe,Normalerweise ist dies eine langjährige Aufgabe</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Daten laden...<br>"</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">ob_flush</span></span><span>(); </span><span><span class="hljs-comment">// Senden Sie Daten sofort an den Browser</span></span><span>
</span><span><span class="hljs-comment">// Angenommen, Sie haben mehrere Schritte, mit denen Sie umgehen können</span></span><span>
</span><span><span class="hljs-title function_ invoke__">sleep</span></span><span>(</span><span><span class="hljs-number">2</span></span><span>); </span><span><span class="hljs-comment">// Simulation wartet</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Ladefortschritt: 50%<br>"</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">ob_flush</span></span><span>(); </span><span><span class="hljs-comment">// Senden Sie Daten sofort an den Browser</span></span><span>
</span><span><span class="hljs-title function_ invoke__">sleep</span></span><span>(</span><span><span class="hljs-number">2</span></span><span>); </span><span><span class="hljs-comment">// Simulation wartet</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Das Laden ist abgeschlossen!<br>"</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">ob_flush</span></span><span>(); </span><span><span class="hljs-comment">// Der letzte Schritt,Senden Sie Daten an den Browser</span></span><span>
</span><span><span class="hljs-comment">// Ausschalten der Ausgangspufferung ausschalten</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ob_end_flush</span></span><span>();
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
Im obigen Code startet Ob_Start () den Ausgangspufferungsmechanismus. Jedes Mal, wenn OB_FLUSH () aufgerufen wird, werden die Daten im Puffer sofort an den Browser gesendet. Die Sleep () -Funktion simuliert die Verzögerung während des Ladens. Auf diese Weise kann der Browser den Fortschritt jedes Schritts in Echtzeit anzeigen, ohne zu warten, bis das Skript ausgeführt wird, bevor die Ergebnisse angezeigt werden.
In einem Überwachungssystem müssen Sie beispielsweise bestimmte wichtige Metriken in Echtzeit angezeigt (z. B. CPU -Verwendung, Speicherverbrauch usw.). Mit OB_FLUSH () können Sie sicherstellen, dass diese Daten dem Benutzer sofort angezeigt werden, wenn sie ohne Verzögerung oder Verzögerung aktualisiert werden.
<span><span><span class="hljs-meta"><?php</span></span><span>
</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">"Überwachen Sie Echtzeitdaten des Systems<br>"</span></span><span>;
</span><span><span class="hljs-keyword">for</span></span><span> (</span><span><span class="hljs-variable">$i</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span> < </span><span><span class="hljs-number">100</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span>++) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Aktuelle Daten:<span class="hljs-subst">{$i}</span></span></span><span>%<br>";
</span><span><span class="hljs-title function_ invoke__">ob_flush</span></span><span>();
</span><span><span class="hljs-title function_ invoke__">flush</span></span><span>(); </span><span><span class="hljs-comment">// Machen Sie die Daten weiter an den Browser gesendet</span></span><span>
</span><span><span class="hljs-title function_ invoke__">sleep</span></span><span>(</span><span><span class="hljs-number">1</span></span><span>);
}
</span><span><span class="hljs-title function_ invoke__">ob_end_flush</span></span><span>();
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
In einer Live -Chat -Anwendung muss die Nachricht des Benutzers sofort an andere Benutzer angezeigt werden. Durch die Verwendung von OB_FLUSH () kann die Browseranzeige sofort nach dem Senden einer Nachricht aktualisiert werden, um die Aktualität der Informationsübertragung zu gewährleisten.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>();
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-literal">true</span></span><span>) {
</span><span><span class="hljs-variable">$message</span></span><span> = </span><span><span class="hljs-string">"Neue Nachrichten:"</span></span><span> . </span><span><span class="hljs-title function_ invoke__">rand</span></span><span>(</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-number">100</span></span><span>); </span><span><span class="hljs-comment">// Simulieren Sie Echtzeitnachrichten</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$message</span></span><span> . </span><span><span class="hljs-string">"<br>"</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">ob_flush</span></span><span>();
</span><span><span class="hljs-title function_ invoke__">flush</span></span><span>();
</span><span><span class="hljs-title function_ invoke__">sleep</span></span><span>(</span><span><span class="hljs-number">2</span></span><span>); </span><span><span class="hljs-comment">// Simulierte Nachrichtenaktualisierungsfrequenz</span></span><span>
}
</span><span><span class="hljs-title function_ invoke__">ob_end_flush</span></span><span>();
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
In Live-Broadcast-Anwendungen müssen Videorahmen und Echtzeitdaten (wie die Anzahl der Zuschauer, die Anzahl der Likes usw.) rechtzeitig aktualisiert werden. Durch OB_FLUSH () kann nicht sichergestellt werden, dass der Browser nicht auf die Fertigstellung der gesamten Datenübertragung wartet, sondern in Segmenten angezeigt wird, um die Benutzererfahrung zu verbessern.
Obwohl OB_FLUSH () die Echtzeitausgangsleistung von Webseiten erheblich verbessern kann, müssen einige Notizen beachtet werden:
Browser -Caching : Der Browser kann den Inhalt zwischenspeichern, was dazu führt, dass einige Inhalte nicht sofort angezeigt werden. Der Cache kann gezwungen werden, durch Flush () und ob_flush () zu aktualisieren.
Leistungsauswirkungen : Häufige Aktualisierungen können den Server zusätzlich belasten, insbesondere wenn eine große Anzahl von gleichzeitigen Anfragen vorliegt. Es muss angemessen gemäß dem tatsächlichen Szenario verwendet werden.
Kompatibilitätsprobleme : Nicht alle Webserver und Browser unterstützen sofortige Aktualisierung. Testen sind erforderlich, um die Kompatibilität sicherzustellen.
Client -Cache : Einige Browser können den Ausgabeinhalt weiterhin zwischenspeichern. Zu diesem Zeitpunkt müssen Sie geeignete HTTP-Header wie Cache-Control: No-Cache verwenden, um den Cache zu deaktivieren.
Durch OB_FLUSH () und Ausgabepuffermechanismus können wir die Echtzeitdatenausgabe von PHP optimieren, wodurch die Webseiten während des Ladens reibungsloser werden und Verzögerungsprobleme durch Verzögerung oder große Datenübertragung vermeiden. Unabhängig davon, ob in Echtzeitdatenüberwachung, Chat-Systemen oder Live-Broadcast-Anwendungen, kann die rationale Verwendung von OB_FLUSH () die Benutzererfahrung erheblich verbessern. Bei der Verwendung sollten jedoch auch die Serverleistung und die Browserkompatibilität in Betracht gezogen werden, um Ressourcenabfälle oder Leistungsprobleme zu vermeiden, die durch häufige Aktualisierungen verursacht werden.