Quantcast



Docs


Blogs


Forums


Samples


Media


Labs


Resources

 




DevCentral > Weblogs > Lori MacVittie - Two Different Socks
 IE8: Robbing Peter to pay Paul
posted on Friday, September 05, 2008 4:19 AM

For those of you unfamiliar with the idiom, it should be taken to mean "benefiting one at the expense of another." frustrated_pc_user In this case, Paul is the end-user and Peter is the server administrator. Or better yet, Paul is the browser and Peter is the server.

All web browsers, including IE (Internet Explorer), impose a per-server connection limit was imposed to reduce overload on servers. This was introduced back when the web was exploding and browsers opened up connections willy-nilly and made server operators cry. Often. The limitation imposed by IE (two connections per host) was harsher than those imposed later by FireFox, which set the limit at eight.

End-users have often bemoaned the slowness of IE's rendering of web pages. This poor performance was due in part to the limitation on connections. With objects numbering many times the connection limit - and each one requiring a separate request to retrieve - requests could queue up quickly on the client, each one waiting to use one of two allowed connections.

In IE8 the limitation still exists, but it's been increased from two connections to six, to improve page download times and overall performance. 

From Nicolas Berthier: IE 8 speed improvements 

In IE8 Beta 1 we also increased our per-server connection limit from 2 to 6. What this means is that in IE7 and below pages could only download 2 elements from a given server at any one time. Increasing that limit to 6 allows sites to download 3 times as much content in parallel, which should translate into faster page download times when bandwidth is available.”

Ryan Breen in his Ajax Performance blog (an excellent resource on the subject, by the way) tested out IE8's new parallelism earlier this year and came to an obvious (at least to me, I predicted this years ago) conclusion:

start_quote_rb I suspect that my hosting provider (Dreamhost) simply can’t keep up with the dramatic increase in connection parallelism. 18 connections is simply too much of a good thing, and it will present a scaling problem for those who are on small to medium hosts. 10 users hitting at the same time will yield 180 concurrent connections, a pretty significant number for smaller providers.end_quote_rb

Given that FireFox already allows eight connections per host, and now IE users will be allowed six, that's a lot of connections per site. Especially when you consider that IE, despite FireFox's grand gains in recent years, still owns the lion share of the browser market.

Ryan is so very correct about the impact this will have on hosting providers and really the infrastructure of anyone whoserver_overload runs a web site or delivers web applications via the Internet. Especially Web 2.0 applications that make extensive use of AJAX. The impact of constantly open connections between the browser and the server from AJAX applications was noticeable, but with the increase in per-server connections in IE that impact may become even more noticeable yet.

I've talked, and written, and written some more on the subject, but now is a good time to proselytize yet again: if you want to mitigate the risk associated with increased connections then consider deploying an application delivery controller. Not a load balancer. Not a cluster controller. An application delivery controller.

Why? Because one of the things an application delivery controller does is to reuse connections between itself and the servers it is virtualizing. By reusing and managing more efficiently those connections it can handle the increase in connections from clients using the same number (or perhaps fewer) of servers you have now. So when 10 users hit the same site, it results in only around 10 connections, not around 180, because the connections on the back-end are reused to handle requests.

Basically, more browser connections means a reduction in the efficiency and capacity of your servers. The number of connections a server can have open at any given time is limited, so particularly heavy use of a site can result in supporting a decreased number of concurrent users, often with a corresponding decrease in application performance resulting from the increased load on the servers, effectively negating the performance gains achieved by IE8's new connection limit.

There isn't a whole lot you can do to your servers to combat this problem. You can either deploy more servers or you can make the servers you have more efficient. If you end up spending money on additional servers it will increase the cost of maintenance and management, or you can spend that money on a solution that not only solves the problem but just might provide some extra value like better performance, additional security, and easier scalability.

Or you can ignore it and hope your site doesn't twitter.

Follow me on Twitter View Lori's profile on SlideShare AddThis Feed Button Bookmark and Share




Email This
  del.icio.us
      

Feedback


9/5/2008 8:30 PM
Gravatar Really good post Laurie!
David Bressler

9/6/2008 3:35 PM
Gravatar Is each "host" on Dreamhost running its own httpd? How virtual are the hosts - an entire virtual Linux instance to yourself, or just an FTP directory you can upload stuff to including PHP?

Basically, on any Unix-like system, Apache should scale up really nicely to the limits of the network connection, then the memory, then the CPU. It makes me wonder if Dreamhost are cutting a corner too many.
David Gerard

9/7/2008 11:32 PM
Gravatar It's actually the developers and site-owner fault and it's been that way ever since the first days of the internet.
There is no real need to open several connections for one phase of download. Desktop applications (as in non-web-based) that do that are deemed slow and unresponsive and are criticized as badly programmed. What is usually being done is bundling a bunch of requests together, opening the connection, transmitting and receiving as fast as possible (zipping the result, pre-caching, client-side caching, guessing the user next move and getting non-intrusive results) and then changing the data displayed to match.
Today, with the super-speedy JavaScript (and even faster in Chrome's V8), it's possible to get a zipped response from the server, open it and push its content to the browser, be it images, other media or code (more JavaScript). Compare this to creating a connection for every image, every JavaScript file, every css, every server html response.
So, IMO, its the developers fault (and I share a tiny part of the blame), and until they realize that correctly written web applications are just like real applications (and that realization is coming, see Chrome again), not only in potential but in responsibilities and limitations as well, it would only get worse.
Ran Biron

9/7/2008 11:42 PM
Gravatar Addendum to the previous feedback:
take this site for example (http://devcentral.f5.com/weblogs/macvittie/archive/2008/09/05/3593.aspx).
It took 85 requests to load it. 85 REQUESTS!
Let's look at the breakdown:
8 CSS, 13 pure code (JavaScript), 4 content and code (html response) and 60 images. Why should a separate request be made for each? Why should the user suffer the overhead of headers and system pollution (handles opening and closing)?
Ran Biron
 Leave Feedback
Title  
Name  
Email
Url
Comments   
Please add 1 and 8 and type the answer here: