I accept that fast-loading pages improve the user experience. From some years, many websites have started using AJAX techniques to minimize latency. Rather than round-trip through the server retrieving a complete new page with every click, often the browser can alter the layout of the page instantly or it can fetch a small amount of XML, HTML or javascript from the server and alter the existing page. In any case, this significantly reduces the amount of time between a user click and the browser finishing rendering the new content.
But, for many websites that reference dozens of external objects, the majority of the page load time is spent in separate HTTP requests for javascript, images and stylesheets. AJAX could help, but speeding up or eliminating these separate HTTP requests might help more, yet there is not a common body of knowledge about how to do so.
For a high-profile AJAX application, while working on optimizing page load times, I got a chance to investigate how much I could reduce latency due to external objects. Specifically, I looked into how the characteristics of common Internet connections and HTTP client implementation in common browsers affect page load time for pages with many small objects.
I found some interesting things:
1)Firefox, IE and Safari ship with HTTP pipelining disabled by default; Opera is the only browser I guess of that enables it. No pipelining means each and every request has to be answered and its connection freed up before the next request can be sent. This incurs average extra latency of the round-trip time to the user divided by the number of connections allowed.
2)IE allows only two outstanding connections per hostname by default, when talking to HTTP/1.1 servers or eight-ish outstanding connections total. Firefox has same limits. Using up to four hostnames instead of one will give you more connections. (the hostnames can all point to the same IP, IP addresses don’t matter.)
I hope you would like this article.