PHP Flush: à Quelle fréquence et les Meilleures Pratiques
Je viens de terminer la lecture de ce post: https://developer.yahoo.com/performance/rules.html#flush et ont déjà mis en place une chasse d'eau après la partie supérieure de mon chargement de la page (tête, css, bannière haut de page/recherche/nav).
Est-il des performances de rinçage? Est-il une telle chose comme trop souvent? Quelles sont les meilleures pratiques?
Si je vais frapper un API externe pour les données, ne serait-il judicieux de les rincer avant la main afin que l'utilisateur n'attend pas sur que les données de revenir, et pouvez au moins obtenir quelques données avant de la main?
- Puisque c'est encore en cours de lecture: au lieu de considérer certains traitement asynchrone grâce à des notifications, par exemple, les websockets. (Ce n'était pas Une Chose quand la question a été posée)
Vous devez vous connecter pour publier un commentaire.
La technique décrite a l'air sympa, mais a plusieurs écueils:
1), le délai entre le script PHP de début et de fin est petite par rapport à la transmission en temps; de plus, cela évite à l'utilisateur d'environ 0,5 secondes, en fonction de votre source. C'est qu'une quantité importante de temps pour vous?
2) cette technique ne fonctionne pas avec gzip tampon de sortie
3) si vous vider trop souvent, vous serez en envoyant un quasi-vide paquet sur la chasse d'eau, ce qui pourrait augmenter le temps de chargement (lent, bruyant connexions).
4) une fois que vous tirez, vous ne pouvez pas envoyer plus de têtes
5) (mineur) de la réponse du serveur viendra dans le codage mémorisé en bloc, ce qui signifie que le client ne sait pas la taille à l'avance (donc de ne plus afficher "x% fait de" lors du téléchargement d'un fichier).
D'autre part, si vous attendez de votre script à exécuter pour un loooong moment (+de 20 secondes), il peut être nécessaire d'envoyer des données (par exemple les espaces) pour garder le navigateur à partir d'interrompre la connexion.
Inconvénient est que vous ne pouvez pas gzip le contenu ainsi que de rinçage autant que je sache, donc j'ai toujours préféré gzip plutôt que de chasse.
Cela fait cela n'a pas d'idée, comme il semble rembourrage plus de données n'est pas très utile.
Je pense que la couleur est vraiment une amende mécanisme de réglage. Uniquement pour les navigateurs utilisent environ 8 threads pour télécharger du contenu (dépend du navigateur). Si vous avez 15 images, le navigateur va commencer à télécharger les 8 images et de ne pas télécharger quoi que ce soit d'autre jusqu'à ce que l'un d'eux se termine, alors il va commencer à télécharger l'image suivante, etc. Par rinçage après l'en-tête, vous êtes essentiellement dit au navigateur que ce qu'il peut commencer le téléchargement. Par le temps que le reste de la page est livré (c'est à dire .5 secondes plus tard), le navigateur peut-être déjà terminé de télécharger les fichiers css et javascript. Cela permettrait de libérer télécharger threads pour d'autres contenus.
Vous ne voulez probablement pas à utiliser lors de la chasse dans tout autre lieu que juste après l'en-tête. Un navigateur n'est pas souvent rendu ouvrez les balises html, si la livraison partielle d'une page n'affiche pas les choses plus rapidement. Les anciennes versions d'IE n'affiche rien du tout jusqu'à ce qu'une certaine quantité de données est reçu, ou la page de livraison est complète.
Suivantes Piskvor point si vous vous attendez à 20s+ attendre, vous pourriez être mieux de fournir une page de base (qui peut être au format gzip) et l'utilisation d'Ajax pour mettre à jour la page lorsque le lent processus est terminé. Vous commencez à porter atteinte à la base de l'utilité de html statique, cependant.