Question

Comment puis-je mesurer combien de temps un client doit attendre une demande.

Du côté du serveur, c'est facile, à travers un filtre par exemple. Mais si nous tenons compte du temps total, temps de latence et transfert des données compris, cela devient difficile.

est-il possible d'accéder au socket sous-jacent pour voir quand la demande est terminée? ou est-il nécessaire de faire quelques astuces en javascript? peut-être par la synchronisation d'horloge entre le navigateur et le serveur? y a-t-il des javascripts prédéfinis pour cette tâche?

Était-ce utile?

La solution

Vous ne pouvez absolument pas savoir combien de temps le client a dû attendre uniquement du côté serveur. Vous aurez besoin de JavaScript.

Vous ne voulez pas synchroniser les horloges client et serveur, c’est trop. Mesurez simplement le temps écoulé entre le moment où le client effectue la demande et celui où il a fini d'afficher sa réponse.

Si le client est AJAX, cela peut être assez simple: appelez new Date (). getTime () pour obtenir l'heure en millisecondes au moment de la demande et comparez-la à l'heure après l'analyse du résultat. Envoyez ensuite ces informations de synchronisation au serveur en arrière-plan.

Pour une application non AJAX, lorsque l'utilisateur clique sur une demande, utilisez JavaScript pour envoyer l'horodatage actuel (du point de vue du client) au serveur avec la requête, puis transmettez le même horodatage au serveur. client lorsque la page résultante est rechargée. Dans le gestionnaire onLoad de cette page, mesurez le temps total écoulé, puis renvoyez-le au serveur, soit à l'aide de XmlHttpRequest, soit en ajoutant un argument supplémentaire à la prochaine requête adressée au serveur.

Autres conseils

Si vous souhaitez effectuer une mesure à partir de votre navigateur afin de simuler toute demande client, vous pouvez consulter l'onglet Internet dans firebug pour voir le temps qu'il faut pour télécharger chaque élément de la page et l'ordre de téléchargement.

Vous pouvez envelopper l'objet HttpServletResponse et le OutputStream renvoyé par HttpServletResponse. Lorsque la sortie commence à écrire, vous pouvez définir une date de début, et lorsqu'elle s'arrête (ou lorsqu'elle est vidé, etc.), vous pouvez définir une date d'arrêt.

Ceci peut être utilisé pour calculer la durée nécessaire au flux de toutes les données sur le client.

Nous l'utilisons dans notre application et les chiffres semblent raisonnables.

modifier: vous pouvez définir la date de début dans un ServletFilter pour obtenir la durée d'attente du client. Je vous ai donné le temps nécessaire pour écrire la sortie sur le client.

Vous pouvez définir un tampon d’envoi de socket de 0 octet (ce que je ne recommande pas exactement). Ainsi, lorsque vous bloquez l’appel à HttpResponse.send (), vous avez une idée plus précise du moment où le dernier octet est parti, mais le temps de trajet. n'est pas inclu. Ekk - Je me sens mal à l'aise de le mentionner. Vous pouvez le faire dans Tomcat avec des paramètres spécifiques au connecteur. ( documentation sur le connecteur Tomcat 6 )

Vous pouvez également proposer une sorte d’approche d’horodatage javascript, mais je ne voudrais pas prévoir le réglage de l’horloge du client. Il faudrait faire plusieurs appels au serveur Web.

  • requête d'horodatage
  • la vraie demande
  • rapporter les données

Et cette approche couvrirait la latence, même si vous avez encore une certaine variance de gigue.

Hmmm… problème intéressant que vous avez là. :)

Découvrez Jiffy-Web , développé par netflix pour leur en donner davantage. vue précise de la page totale - > temps de rendu de la page

J'ai eu le même problème. Mais cette JavaOne Paper m'a vraiment aidé à résoudre ce problème. Je vous demanderais de le parcourir et il utilise essentiellement javascript pour calculer le temps.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top