2010-11-21 7 views
0

Ich habe vor kurzem angefangen zu tauchen in http-Programmierung in C und habe einen funktionierenden Server, der mit GET und POST umgehen kann. Meine Frage kommt zu den Ladezeiten meiner Website und wie ich die Antwortheader und die Antwortnachricht senden soll.C Web Server und Chrome Dev Tools Frage

Ich merke in Chromes Ressource-Tracking-Tool, dass es fast keine (ein paar ms) verbinden/senden/proxy/blocking/Wartezeit in den meisten Fällen (im selben Netzwerk wie der Server), aber die Empfangszeit kann variieren wild. Ich bin mir nicht ganz sicher, was die Empfangszeit beinhaltet. Ich sehe meistens einen langen Empfang (40 bis 140ms oder mehr) Zeit auf den PNG-Dateien und manchmal Javascript-Dateien und selten andere Dateien, aber es ist nicht wirklich konsistent.

Könnte jemand für mich etwas Licht darauf werfen?

Ich habe noch nicht viel getestet, aber ich habe mich gefragt, ob ich die Methode geändert habe, die ich benutze, um die Header/Nachricht zu senden, würde helfen. Ich habe derzeit jede Datei für die Website im Speicher des Servers zusammen mit seiner Kopfzeile (alle in der gleichen Char *). Wenn ich die angeforderte Datei sende, mache ich nur einen send() -Aufruf mit der Header/Datei-Kombination (es beinhaltet keine String-Operationen b/c es ist alles im Voraus beim Server-Start erledigt).

Wäre es besser, es in mehrere kleine send() -Aufrufe zu brechen?

Nur einige Statistiken, die ich mit Chrome-Dev-Tools (wiederum im lokalen Netzwerk über eine drahtlose Router-Verbindung) erhalten, lädt die Website von 120ms auf 570ms. Es sind 19 Dateien bei insgesamt 139,85 KB. Der Computer ist ein Asus 901 Netbook (Atom 1.6 GHz, 2 GB DDR2) mit TinyCore Linux. Ich weiß, es gibt einige Optimierungen, die ich tun könnte, wie Threads starten und ein paar andere Dinge, aber nicht sicher, dass es zu viel atm beeinflusst.

+0

Haben Sie Ihrem Webserver Profiling- oder Debug-Ausgabeinformationen hinzugefügt? Es könnte nützlich sein, einige hoch aufgelöste Timing-Informationen zwischen "Haupt" -Operationen im Code hinzuzufügen, damit Sie den Verlauf des Anfrage-Antwort-Zyklus von der Serverseite aus sehen können. –

+0

Ich habe momentan keine Profilerstellung und minimales Debugging (habe es je nach Bedarf entfernt/hinzugefügt). Sich stark auf Chrome-Dev-Tools verlassen, wahrscheinlich zu stark. Ich bin wirklich blind im Bereich dessen, was ich in der Geschwindigkeit einer guten Site Delivery/Ladezeit suchen sollte. – Wolftousen

Antwort

1

Wenn Sie die gesamte Antwort in einem send() senden, sollten Sie die TCP_NODELAY Socket-Option festlegen.

Wenn das nicht hilft, können Sie versuchen, ein Paketerfassungs-Tool wie Wireshark zu verwenden, um zu sehen, ob Sie sehen können, wo die Verzögerung eingeführt wird.

+0

Ich setze das TCP_NODELAY-Flag, ich werde sehen, was Wireshark mir sagen kann, danke für den Tipp. – Wolftousen

Verwandte Themen