IE9网络性能改进及策略

IE9网络性能改进及策略

红心地瓜

IE9 RTM发布了,筒子们可以下载下来尝尝鲜。业界这次给了IE9比较大的期望值,祝愿微软可以籍此摆脱IE声名狼藉的现状。

IE9的目标是“更快,更安全和更好的用户体验”,在性能方面这次IE9下了很大功夫,IE的官方blog也不遗余力地进行这方面的宣传,今天发布了一篇关于IE9 网络性能改进的文章,从这篇文章我们可以看出IE在网络性能方面的优化策略和思路。

地瓜曾经设计过轻量级浏览器的内核,在网络方面有过一定的研究,这篇文章里面讲到了很多问题,地瓜都曾经经历过,因此看到这篇文章,很有感触,仿佛回到了几年前。总体来说,浏览器发展到现在,网络优化的空间已经不大,现在的很多优化的手段,其实都是一种投机行为(说好听点,就是人工智能)。

当浏览器load一个网页的时候,一般包括几个步骤:1)如果电脑没有使用Web proxy,浏览器首先要进行DNS查询,也就是将www.microsoft.com这样的域名转换成65.55.12.249这样的ip地址,然后再同这个ip地址建立tcp连接。2)如果电脑使用Web proxy,浏览器首先找到proxy(有可能直接在设置中指定了,或者通过 WPAD指定),如果proxy使用域名,先进行DNS查询,然后建立tcp连接。3)如果是安全连接(HTTPS),还需要进行SSL或者TLS的握手。握手中可能产生一次或者多次额外的用于证书鉴权的网络请求。4)连接建立后,浏览器发送HTTP请求给服务器。5)服务器收到请求后,产生响应数据,传回给浏览器。6)如果响应是HTML文件,通常这个HTML会包含其它资源(如图片,脚本,css)的引用,为了完全显示网页,浏览器重复执行之前的步骤来下载所需的资源。

从上面这几个步骤来看,优化的思路无非如下几个1)有多个资源下载的话,是否可以将一些串行操作改变成并行操作2)是否可以减少HTTP请求3)减少DNS查询的时间4)减少建立TCP连接的时间。

HTTP协议中对减少TCP连接的时间有自己的策略,比如说永久连接和pipeline,但是地瓜通过对IE抓包来看,ie并没有采用永久连接和pipeline。对于减少HTTP请求,HTTP协议中有Cache的机制。

IE9主要的提高在于123点。

首先是从DNS查询时间做起,IE9有了些投机起巧的策略。

1)          当用户通过地址栏输入网址的时候,输完3个字符, IE9会马上发起下拉框中前五个备选网站的dns 查询,并将其存到本地操作系统缓存中备用。这样的话,如果用户之后访问到这些域名,浏览器可以减少等待dns查询结果的时间。

2)          对访问过的网站进行猜测性DNS预查询。当用户访问过一个网页的时候,IE9会在网页的历史记录中记录下使用那个网页需要访问的域名。比如,在loading IEBlog的时候,HTML引用了五个其它的站点(i.msdn.miscrosoft.com,
cdn-smooth.ms-studiosmedia.com,go.miscrosoft.com,ieblog.members.winisp.net
silverlight.dlservice.microsoft.com),所以当用户访问IEBlog,创建到blogs.msdn.comtcp连接的时候,IE9会并行发起这几个域名的dns解析请求。

对于并行操作,一般一个网页对每个域名会创建超过一个的HTTP connectionIE9在创建第一个连接的时候并行打开了一个后台连接(background connection)。这样下一个HTTP请求就不用等待连接建立的过程了。一个host只允许建立一个后台连接。(地瓜:这种方式其实加重了服务器的负担)。

  另外,IE9之前的版本已经提出了lookahead downloader的下载策略,也就是下载完HTML之后,立即对它进行扫描,寻找之后可能需要下载的资源(毫无疑问,javascript文件具有最高优先级),这个扫描开始于页面解析之前。然后在页面解析的同时,就可以并行发起这些投机性的下载,为什么说它是投机性下载呢,因为页面解析之后,可能javascript就会remove掉这些需要发起下载的标签。但是,这种情况毕竟不经常发生,即使发生,除了损失一点性能之外没有其它的害处。

在缓存方面,IE9在缓存实现算法上有所改进,之前的版本,IE缺省地将Web内容缓存大小限制为硬盘大小的1/32IE7,IE8缺省的是50M。限制这么小的一个坏处是如果达到这个容量,经常需要进行缓存淘汰。之前的版本通过测试,设置大了并不能显著提高缓存命中比率。而且需要更长时间的枚举和清理。但是,IE9重新审视了这个测试结论,并改进了一些算法,解决了一些相关问题以后,更大的缓存大小设置就可以带来更好的命中率。所以IE9将缺省的缓存大小设置为硬盘大小的1/32(考虑到硬盘容量变大)以及250M。从这里,我们可以发现,缓存大小的设置,影响网页加载速度,筒子们可以Tools->Internet Options->GeneralàBrowsing History Settings dialog box修改。当然,缓存大小设置也有限制,因为缓存条目有6000条的限制,如果设置太大了,就会先达到条目的限制,没有意义。

缓存清理工作。很久以前,地瓜在手机上实现HTTP协议,当时一直在考虑如何指定合理的缓存淘汰算法。通过这篇博客,我们看到了IE9的缓存淘汰算法。

首先,缓存淘汰算法的目标是当缓存到达它的大小或者条目限制的时候,清理掉至少10%的缓存。

IE9对缓存对象维护一个打分系统,对所有缓存对象进行打分,分值最低的10%条目会被清理掉。计算分值的时候,总分是66000,器重40000是由指定资源最近一次访问的时间确定(最近访问的条目分值高),2000分由资源访问的频率决定(经常访问的条目分高)6000分来自于缓存校验信息(validator information,像Last-ModifiedEtag这样的响应头部)是否存在,这些校验信息允许对资源在到期后进行条件请求和校验。资源的MIME类型也会在分值计算中得到反应,script,CSSHTML/XHTML资源获取全部分数,而images,audio等获取指定分数的一半(其实是根据不同资源对页面下载时间的影响作出的决策)。那些使用超过一词的缓存条目得到增加的重用分。为了获取10000重用分,资源必须在超过12个小时的时间段被重复使用(这避免了资源在一个很短时间频繁访问,比如那些从长期看你很少上的网站)。有validator的条目可以获取validator分数,当然,最大的影响是资源是否还新鲜。那些过期且没有validators的条目会得0分,有validator的可以获取70%的分数。

另外,IE9中包含了新的Tracking ProtectiongActiveX过滤功能,这两个功能通过阻止下载和执行未要求的内容,也可以提高总的浏览器性能。

 

参考

1)          Internet Explorer 9 Network Performance Improvements
http://blogs.msdn.com/b/ie/archive/2011/03/17/internet-explorer-9-network-performance-improvements.aspx

2)          Bugs in IE8's Lookahead Downloader

http://blogs.msdn.com/b/ieinternals/archive/2009/07/27/bugs-in-the-ie8-lookahead-downloader.aspx

3)          DNS Prefetching (or Pre-Resolving) ,
http://blog.chromium.org/2008/09/dns-prefetching-or-pre-resolving.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值