对 Modernizr JavaScript 文件的引用是否应该在页面的头部?我总是尝试将所有脚本放在页面底部并希望保留它。如果它需要在头脑中,为什么?
4 回答
我认为不:您放置在其中的每个脚本<head>
都会阻止渲染和进一步的脚本执行。Modernizr 所做的唯一必须发生的事情<head>
是集成的html5shiv,它将 HTML5 标签支持破解到 Internet Explorer 8 和更早版本中。
我昨天对此进行了测试,发现这非常重要——在我工作的网站上,该网站已经进行了相当好的优化,将单个脚本添加到头部延迟了我在 IE9 中的加载时间约 100 毫秒,这甚至没有从 shiv 中受益!
由于我大约 90% 的流量来自原生支持 HTML5 的浏览器,而且我没有核心 CSS 需要modernizr 类在初始渲染时正确显示,所以我使用这种方法将 html5shiv 放入条件注释和在没有集成垫片的情况下加载modernizr:
<html>
<head>
…
<!--[if lt IE 9]>
<script src="html5shiv.min.js"></script>
<![endif]-->
</head>
<body>
…
<script src="modernizr.custom.min.js"></script>
</body>
</html>
Paul Irish 现在建议,对于 > 75% 的网站,将 Modernizr 置于head
.
将 Modernizr 移至底部
它更有可能引入意外情况,但是对于用户来说完全没有脚本要好得多。
我敢打赌> 75%的网站不需要它。我宁愿改变这个默认值并教育 25% 的人,也不愿看着我们放慢所有这些网站的速度。
以稍微不同的方式使用 IE 条件语句怎么样?大家怎么看这个解决方案:
在<head></head>
标签内:
<!--[if lt IE 9 ]>
<script src="/path/to/modernizr.js"></script>
<![endif]-->
</head>
</body>
标签结束前:
<!--[if gt IE 8]><!-->
<script src="/path/to/modernizr.js"></script>
<!--<![endif]-->
</body>
这将导致 Modernizr 在 IE8 及更低版本的头部加载,并且它将在任何其他浏览器的主体之前加载。
欢迎在评论中公开讨论利弊。