La fonction ob_clean () efface le tampon de sortie de PHP. Cette opération effectue essentiellement une grande quantité de mouvement de données et de compensation en mémoire, en particulier lorsque la quantité de données dans le tampon est grande. Chaque fois que Ob_clean () est appelé, PHP doit rejeter le contenu dans le tampon et préparer un nouveau tampon pour les opérations de sortie ultérieures.
Consommation de mémoire: lorsque le tampon est effacé, PHP alloue l'espace mémoire pour stocker de nouvelles données. Si la mémoire est fréquemment effacée et réallouée, les frais généraux de mémoire inutiles seront provoqués.
Occupation du processeur: Chaque fois que le tampon est effacé, PHP doit traiter le contenu du tampon, ce qui augmentera la charge du CPU, en particulier dans les scénarios de concurrence élevés, affectant les performances du système.
Cette mémoire fréquente et l'utilisation du processeur entraîneront le ralentissement du programme, en particulier dans les grands sites Web ou les applications, et la dégradation des performances sera plus évidente.
Afin d'éviter les problèmes de performances causés par des appels fréquents à ob_clean () , nous pouvons optimiser à partir des aspects suivants:
PHP permet la mise en mémoire tampon de sortie par défaut, ce qui signifie que toutes les sorties ne sont pas envoyées immédiatement au navigateur, mais sont stockées en mémoire d'abord. Lorsque le script est exécuté, PHP enverra le contenu du tampon au client en même temps.
Nous pouvons contrôler la taille du tampon de sortie en configurant le paramètre Output_Buffering . Si votre application n'a pas besoin de nettoyer fréquemment le tampon, vous pouvez réduire le nombre d'appels à ob_clean () en augmentant la taille du tampon. Par exemple, l'augmentation de la taille du tampon peut nous donner plus de temps pour traiter les données dans le script sans avoir besoin de nettoyer fréquemment le tampon.
<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">// Réglez le tampon sur4KB</span></span><span>
</span></span>
Dans de nombreux scénarios, nous devons contrôler le synchronisation de la sortie pour éviter le dégagement de tampon fréquent. L'utilisation d' OB_CLEAN () peut être réduite en retardant le moment de la sortie vers la page.
Par exemple, après avoir terminé tout le traitement des pages, le contenu du tampon peut être sorti uniformément pour éviter d'effacer le tampon chaque fois que les données sont traitées. Cette méthode peut améliorer considérablement les performances.
<span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>(); </span><span><span class="hljs-comment">// Allumez la tampon de sortie</span></span><span>
</span><span><span class="hljs-comment">// Effectuer un traitement des données,Pas appelé 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">// Enfin sortie unifiée</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ob_end_flush</span></span><span>();
</span></span>
Dans une logique métier spécifique, il est en effet nécessaire de vider le tampon de sortie. Mais si ob_clean () est fréquemment appelé uniquement en raison d'une programmation incorrecte, ou en raison d'une logique erronée, l'ordre de sortie peut être évité en ajustant la logique de code. Par exemple, faites des conditions raisonnables au niveau de l'application pour éviter les opérations de nettoyage inutiles.
<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>
Dans certains cas, si vous souhaitez simplement envoyer le contenu du tampon au navigateur immédiatement, mais ne dégagez pas le tampon, vous pouvez utiliser la fonction flush () . Flush () envoie le contenu dans le tampon au client, mais n'efface pas le contenu du tampon, réduisant ainsi la mémoire et la consommation de processeur.
<span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>(); </span><span><span class="hljs-comment">// Allumez la tampon de sortie</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">// Envoyer du contenu au client,Mais ne pas effacer le tampon</span></span><span>
</span></span>
PHP fournit un mécanisme de contrôle de sortie de niveau inférieur que ob_clean () , comme utiliser ob_end_clean () pour effacer et fermer complètement le tampon, ou utiliser ob_get_clean () pour obtenir et effacer le contenu tampon. Ces méthodes peuvent contrôler plus précisément la mise en mémoire tampon de sortie dans certains scénarios spécifiques, en évitant les appels fréquents vers ob_clean () .
<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">// Obtenez et effacez le contenu tampon</span></span><span>
</span><span><span class="hljs-comment">// Opération supplémentaire $content,Évitez de nettoyer directement le tampon</span></span><span>
</span></span>