2010-11-21 7 views
0

J'ai récemment commencé à plonger dans la programmation http en C et j'ai un serveur qui peut gérer GET et POST. Ma question concerne les temps de chargement de mon site et comment envoyer les en-têtes de réponse et le message de réponse. Je remarque dans l'outil de suivi des ressources de Chromes qu'il n'y a presque pas (quelques ms) de connexion/envoi/proxy/blocage/temps d'attente dans la plupart des cas (sur le même réseau que le serveur), mais le temps de réception peut varier sauvagement. Je ne suis pas entièrement sûr de ce que le temps de réception comprend. Je vois surtout un long temps de réception (40 à 140ms ou plus) sur les fichiers png et parfois des fichiers javascript et rarement d'autres fichiers, mais ce n'est pas vraiment cohérent.C Serveur Web et outils de développement Chrome question

Quelqu'un pourrait-il nous éclairer à ce sujet?

Je n'ai pas encore fait beaucoup de tests, mais je me demandais si je pouvais changer la méthode que j'utilise pour envoyer l'en-tête/le message. J'ai actuellement tous les fichiers pour le site mis en cache dans la mémoire du serveur avec son en-tête (tous dans le même char *). Quand j'envoie le fichier qui a été demandé, je fais juste 1 appel send() avec l'en-tête/fichier combo (il n'implique aucune opération de chaîne de caractères b/c tout est fait à l'avance au démarrage du serveur). Serait-il préférable de le diviser en plusieurs petits appels send()?

Juste quelques statistiques que je reçois avec les outils de développement Chrome (encore une fois, sur le réseau local via une connexion de routeur sans fil), le site charge de 120ms à 570ms. Il s'agit de 19 fichiers d'un total de 139,85 Ko. L'ordinateur sur lequel il est est un netbook Asus 901 (atome 1.6ghz, 2gb ddr2) avec TinyCore linux. Je sais qu'il y a des optimisations que je pourrais faire avec le démarrage des threads et quelques autres choses, mais je ne suis pas sûr que cela affecte beaucoup d'atm.

+0

Avez-vous ajouté des informations de profilage ou de sortie de débogage à votre serveur Web? Il peut être utile d'ajouter des informations de synchronisation à haute résolution entre les opérations "majeures" du code afin que vous puissiez voir la progression du cycle demande-réponse du côté serveur. –

+0

Je n'ai pas de profilage pour le moment, et un débogage minimal (suppression/ajout au besoin). Été en s'appuyant fortement sur les outils de développement de chrome, probablement fortement. Je suis vraiment aveugle dans le domaine de ce que je devrais rechercher dans la rapidité d'une bonne livraison de site/temps de chargement. – Wolftousen

Répondre

1

Si vous envoyez la réponse entière dans un send(), vous devez définir l'option de socket TCP_NODELAY.

Si cela ne vous aide pas, vous pouvez essayer d'utiliser un outil de capture de paquets comme Wireshark pour voir si vous pouvez repérer où le retard est introduit.

+0

Je mets le drapeau TCP_NODELAY, je vais voir ce que Wireshark peut me dire, merci pour le conseil. – Wolftousen

Questions connexes