先来看这行代码:
这有点儿……不怎么样。“这该放在哪儿?”开发人员会奇怪,“靠上点,放到
标签里?还是靠下点,放到标签里?”这两种做法都会让富脚本站点的下场很凄惨。标签里的大脚本会滞压所有页面渲染工作,使得用户在脚本加载完毕之前一直处于“白屏死机”状态。而标签末尾的大脚本只会让用户看到毫无生命力的静态页面,原本应该进行客户端渲染的地方却散布着不起作用 的控件和空空如也的方框。完美解决这个问题需要对脚本分而治之:那些负责让页面更好看、更好用的脚本应该立即加载,而那些可以待会儿再加载的脚本稍后再加载。但是怎样才能既滞压这些脚本,又能保证它们在被调用时的可用性呢?
一、
这确实大大缩短了加载时间,但要注意一点,这可能让用户有机会在加载bodyscripts.js 之前与页面交互。 2、 脚本的提前加载与延迟运行 上面建议将大多数脚本放在
理想情况下,脚本的加载应该与文档的加载同时进行,并且不影响DOM 的渲染。这样,一旦文档就绪就可以运行脚本,因为已经按照
请记住deferredscripts 的封装很重要,这样即使浏览器不支持defer,deferredscripts 也会在文档就绪事件之后才运行。如果页面主体内容远远超过几千字节,那么付出这点代价是完全值得的。
3、 脚本的并行加载
如果你是斤斤计较到毫秒级页面加载时间的完美主义者,那么defer也许就像是淡而无味的薄盐酱油。你可不想一直等到此前所有的defer 脚本都运行结束,当然也肯定不想等到文档就绪之后才运行这些脚本,你就是想尽快加载并且尽快运行这些脚本。这也正是现代浏览器提供了async(异步)属性的原因。


