Even Faster Web Sites: 读书笔记(一)[ZT]

《Even Faster Web Sites》是Steve Souders的新书。Steve Souders现在是Google工程师,《High Performance Web Sites》一书的作者,Google Web Ex系列讲座的主持人,对前端优化有很专业的研究。他的UA ProfilerCuzillion项目尤其引人注目。

《High Performance Web Sites》这本书相信大家都比较熟悉,Souders在其中主要讲解了Yahoo!的14条网站性能军规。很是期待这本《Even Faster Web Sites》,可惜国内市面上还没有。偶得电子版一套,迫不及待打印出来,细细读来。

这本书只有一多半是Souders写的,其他部分是Crockford, NCZ等人的贡献,因此十分有内容。这次先记一些关于页面加载性能方面的读书笔记。

Splitting the initial payload

 

要提高前端性能,可以这样:页面在第一次加载时,只加载渲染页面所需要的资源(主要针对js),以及一个ScriptLoader方法。其他js资源在需要的时候再动态加载。这样做的挑战就是分离用于初次渲染的js资源,也就是找到split。微软有一个Doloto项目是做这个的,但Doloto还没有向外公布,所以我们得手动搞分裂了。

Loading scripts without blocking

外部js文件在下载和执行时,大多数浏览器都会阻塞其后面的内容(ps这也是可以理解的)。要防止这种阻塞,有若干种办法。我们比较常用的大概是XHR注入和Script tag。Souders还介绍了XHR Eval, Script in Iframe, Script Defer, document.write(<script>)等,并且画出了决策树。这些方法原理都是用异步加载外部js文件,以提高页面渲染速度。方法类似于我们用script tag来实现类ajax跨域应用。

大家可以用Cuzillion来真实测试一下堵塞情形,非常有意思,非常有必要,非常好。

前两天NCZ在他的博客上也对这种异步加载作了介绍,The best way to load external JavaScript。他认为这项技术的best practice是,首先写一个scriptLoader.js,再把页面所需要的其他js都放在second.js里,把scriptLoader.js放在</body>之前,再紧跟行内js加载second.js文件。确实不错,而且YUI和Google Analytics都这么做了。

那么到底用哪种方法来做script loader呢,在实际应用中,我认为如果不需要跨域、不考虑多个js文件加载顺序的话,XHR Injection最好,因为它不会阻塞onload事件(发现TinyMCE加载插件就是这个原理);否则的话,就是用script tag方法。

Positioning inline scripts

行内js在执行时,会阻塞其后内容的并行加载、页面渲染。顺便说,如果执行时间过长(100ms以上),用户会感觉到卡,体验非常不好。为了防止阻塞,可以用setTimeout来实现异步调用。那么文档下载完之后,为了给浏览器喘息的机会(进行渲染),延时多久才让这些js执行呢,IE下0ms即可,Firefox下是250ms。

另外有一个大忌,就是外部css文件紧跟行内js的情况。这样会造成比较严重的阻塞。是什么原因呢?行内js一般不会被阻塞,除非代码前面有css。

<link rel='stylesheet' type='text/css' href='a.css' />
<script type="text/javascript">
// do a lot of things
</script>

假如行内js前有一个外部css文件(如上述代码),那么这段js要等到css文件完全下载完才会被执行,js被阻塞,造成了页面剩余内容被阻塞,恶劣的连锁反应被引发。

 

本文转自:http://jsfox.cn/blog/javascript/even-faster-websites-notes1.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值