Chrome小窥探

先介绍背景知识,一个网页连接所花的大概时间:

 

没有本地缓存,相对较快的DNS lookup(50ms), TCP握手,SSL协商,以及一个较快服务器响应时间(100ms)和一次延迟(80ms,在美国国内的平均值): 50ms for DNS 80ms for TCP handshake (one RTT)

160ms for SSL handshake (two RTT’s)

40ms (发送请求到服务器)

100ms (服务器处理)

40ms (服务器回传响应数据)

一个请求花了470毫秒, 其中80%的时间被网络延迟占去了。

 

Google Chrome做到“快”,下的功夫在DNS预解析(pre-resolve) 上,做到“越来越快”,功夫在预测功能优化上,即根据用户习惯得出用户这厮的浏览习惯而预测未来。

预解析会参考以下几个场景得出是否解析的结论:

1)鼠标悬停于某个标签上

2)Omnibox建议(与搜索引擎结合,据说是Chrome的一项创新)

3)之前浏览记录

4)浏览器自己猜测

而根据预解析这猜测是否成功,记录下来,下次就有了更好的猜测依据。打开 chrome://predictors ,可以看到chrome对解析网页命中率的记录,对于记录的删除,采用的算法是LRU(Least Recently Used)。

还有些预解析的,比如每次打开chrome,都会先把用户最常访问的10个网站给解了(过两天闲下来就验证下=。=不过这惰性,估计是过两天就忘了这事。。。)

 

除了DNS pre-resolve,chrome中我觉得比较有意思的还有:

  • Socket reuse: 在Socket Pool中提供持久可用的TCP connections
  • 预渲染(猜你会到哪个网站,先把它藏在后台)

 

至于用预测功能优化,这里面扯到算法,跟其他的预测算法在我看来有相似之处,就不想再写了。

 

参考:

https://www.igvita.com/posa/high-performance-networking-in-google-chrome/

http://news.cnblogs.com/n/192502/

posted on 2014-05-24 11:03  alex_wood  阅读(151)  评论(0编辑  收藏  举报