优化内嵌脚本的位置

英文原文地址

Even Faster Web Sites里面的头3个章节中 (Splitting the Initial Payload, Loading Scripts Without BlockingCoupling Asynchronous Scripts), 侧重于外部脚本. 但是内嵌脚本和外部脚本一样同样会阻塞下载和渲染页面. 这个内嵌脚本导致阻塞的例子包含了2个图片,在图片之间有一个内嵌脚本,内嵌脚本执行需要5秒的时间. 查看HTTP瀑布图,我们可以看到第2个图片(内嵌脚本后面的图片)在内嵌脚本执行完毕之前是被阻塞下载的。

内嵌脚本和外部脚本一样会导致阻塞渲染,或者情况会更糟。外部脚本只会阻塞那些位于脚本下方的页面元素的渲染,内部脚本却会阻塞页面内所有元素的渲染。你可以通过 内嵌脚本导致阻塞 的例子发现在5秒内你看不到任何内容.

这里有3个避免或减轻内嵌脚本阻塞行为的策略:

  • 将内嵌脚本移到页面底部 - 虽然这仍会阻塞页面渲染,但不会阻塞页面内容下载.
  • 使用setTimeout延迟执行耗时比较长的代码 - 如果你有一个耗时比较长的函数,通过setTimeout延迟触发此函数。这样会无阻塞的加载和渲染页面.
  • 使用DEFER- 在 Internet Explorer 和 Firefox 3.1 或更高版本下,增加SCRIPT的DEFER属性会避免内嵌脚本的阻塞行为.

尤其重要的是:避免将内嵌脚本放在样式表和其它可下载资源之间。这会导致看起来好像是样式表造成了阻塞。造成这种行为的原因是所有的主流的浏览器都保持了CSS和JAVASCRIPT的顺序. 样式表必须在内嵌脚本执行之前完全下载、解析、应用。内嵌脚本必须在其它资源下载前执行。因此,样式表和内嵌脚本后面的资源就被阻塞下载了。

使用下面这个例子来解释更好. 下面是eBay.com的HTTP瀑布图. 通常, 样式表和第一个外部脚本会并行下载.1 但在这个页面样式表后面,有一个内嵌脚本(仅仅有一行代码). 这会导致外部脚本被阻塞下载

ebay.com样式表后面有内嵌脚本会阻塞下载
ebay.com样式表后面有内嵌脚本会阻塞下载

去掉ebay.com样式表后面的内嵌脚本理想 效果
去掉ebay.com样式表后面的内嵌脚本理想效果

不必要的阻塞也发生在MSN, MySpace, 和Wikipedia这些大网站上. 解决办法是将内嵌脚本移到样式表上方或所有元素下方. 这会增加并行下载的能力.

1包括IE8,Firefox 3, Safari, Chrome,和Opera.等浏览器,均可以并行下载2个或以上的并发连接。
此例要在IE下设置4个并发连接,打开注册表(regedit.exe),将 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings键下设置
MaxConnectionsPerServer=4
MaxConnectionsPer1_0Server=4

转载于:https://www.cnblogs.com/yslow/archive/2009/05/08/1452552.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值