应该将Modernizr文件放在头上吗?

ama*_*eur 61 javascript html-head modernizr

应该是对Modernizr JavaScript文件的引用是否在页面的头部?我总是尝试将所有脚本放在页面底部,并希望保留它.如果它需要在头脑中,为什么?

Wes*_*rch 71

如果您希望Modernizr尽快下载并执行以防止FOUC,请将其放入<head>

从他们的安装指南:

删除<head>HTML中的脚本标记.为了获得最佳性能,您应该在样式表引用后跟随它们.我们建议将Modernizr置于头部的原因有两个:HTML5 Shiv(在IE中启用HTML5元素)必须在之前执行<body>,如果您使用的是Modernizr添加的任何CSS类,您将需要防止FOUC.

  • 哈,FOBUC.+1就是为了那个! (7认同)
  • 看起来FOBUC(Flash Of Butt-Ugly Content)已经不再支持"FOUC"(Flash of Unstyled Content).谷歌甚至(或不会)找不到任何参考.呸. (7认同)
  • 如果您最近发现这一点,Paul Irish的更新将在2014年的帖子中介绍这一点https://github.com/Modernizr/Modernizr/issues/878#issuecomment-41448059 (5认同)

Chr*_*ams 55

我认为不会:你在<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>
Run Code Online (Sandbox Code Playgroud)

  • 我的modernizr.custom.min.js排除了shiv,也是为了检查我实际使用的功能而量身定制的.根据您的需要,这可能实际上足够小,可以考虑在页面上进行内联 (2认同)

Dav*_*och 34

Paul Irish现在建议,对于75%以上的网站,将Modernizr放入网站是没有好处的head.

将Modernizr移到底部

它更有可能引入意想不到的情况,但是对于用户来说根本没有脚本就更好了.

我打赌> 75%的网站不需要它.我宁愿改变这个默认值,并教育25%而不是观看,因为我们放慢了所有这些网站的速度.

https://github.com/h5bp/html5-boilerplate/issues/1605


red*_*x05 15

如何以稍微不同的方式使用IE条件?每个人都想到这个解决方案:

<head></head>标签内:

<!--[if lt IE 9 ]>
<script src="/path/to/modernizr.js"></script>
<![endif]-->
</head>
Run Code Online (Sandbox Code Playgroud)

</body>标签结束之前:

<!--[if gt IE 8]><!-->
<script src="/path/to/modernizr.js"></script>
<!--<![endif]-->
</body>
Run Code Online (Sandbox Code Playgroud)

这将导致Modernizr加载到IE8及更低版本的头部,并且它将在任何其他浏览器的主体之前加载.

在评论中欢迎公开讨论利弊.