Dans la programmation PHP, la mise en mémoire tampon de sortie est un outil puissant qui peut contrôler efficacement la synchronisation de sortie du contenu de la page, améliorant ainsi les performances et l'expérience utilisateur. Surtout lorsque vous devez produire progressivement le contenu de la page, OB_START et OB_FLOSH sont deux fonctions couramment utilisées et importantes. Ils permettent aux développeurs de tamponner le contenu de la page avant la sortie et peuvent sortir du contenu au navigateur étape par étape ou instantanément, ce qui est particulièrement important pour les pages qui nécessitent un traitement de données à grande échelle ou du contenu généré dynamiquement.
ob_start ()
ob_start () démarre le tampon de sortie, qui stocke tous les contenus de sortie du script PHP dans un tampon en mémoire jusqu'à ce que le script soit exécuté ou ob_flush () est appelé. Par défaut, PHP enverra la sortie directement au navigateur, mais avec ob_start (), vous pouvez en pause et enregistrer tout dans le tampon d'abord.
ob_flush ()
La fonction ob_flush () est utilisée pour sortir immédiatement le contenu du tampon au navigateur. Ceci est particulièrement utile pour les scénarios où le contenu doit être sorti étape par étape, ou pour les commentaires de progrès sur les pages à long terme. Après l'appel ob_flush () , le contenu du tampon sera rincé et le script sera exécuté, mais le cycle de vie du tampon de sortie ne se terminera pas tant que l'appel à ob_end_flush () ou le script se terminera.
En utilisant ob_start () et ob_flush () raisonnablement, vous pouvez implémenter la sortie progressive de la page, en évitant le navigateur en attendant que la page entière soit générée avant le chargement de la page. Voici un exemple simple montrant comment combiner ces deux fonctions pour sortir du contenu étape par étape.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// Allumez la tampon de sortie</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>();
</span><span><span class="hljs-comment">// Simuler le processus de génération de grandes quantités de données</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">1</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span> <= </span><span><span class="hljs-number">5</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span>++) {
</span><span><span class="hljs-comment">// Générer le contenu de la partie actuelle</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Processing step <span class="hljs-subst">$i</span></span></span><span>...\n";
</span><span><span class="hljs-comment">// Forcer actualiser le tampon,Envoyer la sortie actuelle au navigateur</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ob_flush</span></span><span>();
</span><span><span class="hljs-comment">// Faire une pause pendant un moment,Simuler un processus de traitement à long terme</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">// Tente de sortie tamponnée et envoyer le contenu restant</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>
Allumez la tampon de sortie: ob_start () démarre la tampon de sortie afin que tout le contenu de sortie ne soit pas envoyé immédiatement au navigateur.
Simuler le traitement long: dans une boucle pour chaque itération génère un morceau de texte et des sorties via Echo . En règle générale, ces contenus sont mis en cache dans le tampon.
Sortie étape par étape: utilisez ob_flush () pour forcer le contenu du tampon au navigateur. De cette façon, même si le script continue d'être exécuté, l'utilisateur peut toujours voir le contenu de sortie.
Délai de simulation: le sommeil (2) consiste à simuler le délai pendant le traitement, et les utilisateurs peuvent voir l'effet de la sortie étape par étape.
Sortie de mise en mémoire tampon: ob_end_flush () sortira le contenu restant et fermera le tampon, garantissant que tout le contenu est envoyé au navigateur.
Traitement de grandes quantités de données: Lors du traitement de grandes quantités de données, s'il n'y a pas de mécanisme tampon, la page peut attendre longtemps pour afficher les résultats, qui possède une mauvaise expérience utilisateur. L'utilisation d'OB_START et OB_FLOSH permet au navigateur de recevoir progressivement des données et d'améliorer l'interactivité.
Tâches de longue durée: telles que l'importation de fichiers, la génération de rapports et d'autres tâches, qui peuvent prendre plusieurs minutes ou même plus. Par sortie étape par étape, l'utilisateur peut voir les progrès plutôt que de continuer à s'attendre.
Génération de contenu dynamique: par exemple, le chargement progressivement des nouvelles, des commentaires ou du contenu généré par l'utilisateur et d'autres scénarios, OB_START et OB_FLOSH peuvent maintenir la réactivité de la page et améliorer les performances côté serveur.
avantage:
Améliorer l'expérience utilisateur: les scripts de longue durée peuvent éviter d'attendre les utilisateurs grâce à la sortie progressive et à maintenir la réactivité des pages.
Réduisez l'empreinte de la mémoire: une grande quantité de données est de sortie étape par étape pour éviter de se charger dans la mémoire à la fois, en enregistrant les ressources de mémoire.
Sortie de contrôle plus flexible: il permet un contrôle précis du moment où le contenu est envoyé au navigateur, améliorant la flexibilité et la personnalisation du développement.
Notes:
Problèmes de mise en cache du navigateur: Même avec OB_FLOSH , certains navigateurs peuvent mettre en cache un certain contenu, ce qui a permis à la sortie d'être pire que prévu. Le cache du navigateur peut être en outre obligé de se rafraîchir via la fonction Flush () .
Taille du tampon: le tampon de sortie de PHP a des limites de taille. Si le tampon est trop grand ou trop de données sont sorties, cela peut entraîner des problèmes de performances. La taille du tampon doit être gérée raisonnablement.
Possible de provoquer des problèmes de séquence de sortie: dans les demandes simultanées ou les environnements multithreads, la sortie tampon peut provoquer une confusion de séquence de sortie. Assurer une logique claire et éviter les problèmes causés par une mauvaise gestion des tampons.
La combinaison ob_start () et ob_flush () peut contrôler efficacement la sortie progressive du contenu de la page PHP, optimiser l'expérience utilisateur et améliorer les performances de la page. En concevant rationnellement le mécanisme tampon de sortie, il est possible de s'assurer que la page est constamment mise à jour pendant le traitement lors de l'exécution de tâches à long terme et d'éviter que la page soit "coincée" pendant longtemps. Dans le même temps, les développeurs peuvent mieux équilibrer les performances et la vitesse de réponse en contrôlant de manière appropriée le rythme de sortie. Ces technologies conviennent particulièrement aux pages qui nécessitent de grandes quantités de traitement des données, de génération de contenu dynamique ou de pages de longue durée.