Flush PHP: À quelle fréquence et les meilleures pratiques

voix
23

Je viens de terminer la lecture de ce post: https://developer.yahoo.com/performance/rules.html#flush et ont déjà mis en œuvre une chasse d' eau après la partie supérieure de mon chargement de la page (tête, css, top bannière / Recherche / nav) .

Y at-il performance due chasse? Y at-il une telle chose que de le faire trop souvent? Quelles sont les meilleures pratiques?

Si je vais frapper une API de données externe, serait-il logique de rincer avant de la main afin que l'utilisateur n'attend pas sur ces données pour revenir, et peut au moins obtenir des données avant la main?

Créé 09/12/2008 à 14:51
source utilisateur
Dans d'autres langues...                            


4 réponses

voix
19

La technique décrite est joli, mais a plusieurs écueils:

1) le temps écoulé entre le début de script PHP et à la fin est faible par rapport au temps de transmission; En outre, cela évite à l'utilisateur environ 0,5 secondes, selon votre source. Est-ce une quantité importante de temps pour vous?

2) cette technique ne fonctionne pas avec gzip mise en mémoire tampon de sortie

3) si vous videz trop souvent, vous allez envoyer un paquet presque vide de chasse, ce qui pourrait en fait augmenter le temps de chargement (sur des connexions lentes, bruyantes).

4) une fois que vous videz, vous ne pouvez pas envoyer d'autres en-têtes

5) (problème mineur) la réponse du serveur viendra dans le codage chunked, ce qui signifie que le client ne saura pas la taille à l'avance (ne sera donc pas afficher « x% fait » lors du téléchargement d'un fichier).

D'autre part, si vous vous attendez votre script à exécuter pendant un certain temps looooooongues (20+ secondes), il peut être nécessaire d'envoyer des données (espaces, par exemple) pour garder le navigateur de temps la connexion.

Créé 09/12/2008 à 15:10
source utilisateur

voix
5

Inconvénient est que vous ne pouvez pas gzip le contenu ainsi que le rinçant afaik, donc je l'ai toujours préféré gzip plutôt que de chasse.

Certaines versions de Microsoft Internet Explorer ne commenceront à afficher la page après avoir reçu 256 octets de sortie, de sorte que vous pouvez avoir besoin d'envoyer des espaces supplémentaires pour obtenir ces navigateurs pour afficher la page.

Cela rend cela ne idée, car il semble padding plus de données ne sont pas très utiles.

Créé 09/12/2008 à 14:58
source utilisateur

voix
3

Je pense que chasse d'eau est vraiment un mécanisme de réglage fin. Les navigateurs utilisent seulement 8 threads pour télécharger le contenu (en fonction du navigateur). Si vous avez 15 images, le navigateur commence à télécharger 8 images et ne télécharger quoi que ce soit d'autre que l'un d'entre eux est terminé, il commence à télécharger l'image suivante, etc. En rinçant après l'en-tête, vous dites essentiellement au navigateur il peut commencer à télécharger. Au moment où le reste de la page est fourni (c.-à-.5 secondes plus tard), le navigateur peut déjà avoir fini de télécharger le CSS et JavaScript fichiers. Cela libérerait des fils de téléchargement pour d'autres contenus.

Vous ne voulez probablement pas utiliser affleurant dans tout autre lieu que juste après l'en-tête. Un navigateur ne sera généralement pas rendu les balises HTML non fermées, donc livrer une page partielle n'affichera les choses plus vite. Les anciennes versions de IE n'afficher quoi que ce soit jusqu'à ce qu'une certaine quantité de données est reçu, ou la livraison de la page est complète.

Créé 30/03/2010 à 14:11
source utilisateur

voix
2

À la suite du point de Piskvor - si vous attendez 20s + attendez, vous pouvez être mieux fournir une page de base (qui peut être gzip) et en utilisant Ajax pour mettre à jour la page lorsque le lent processus est terminé. Vous commencez à porter atteinte à l'utilité de base du langage HTML statique, cependant.

Créé 09/12/2008 à 15:17
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more