为什么把scripts放在文档的尾部可以加快页面加载速度?
bootstrap的模板页view-source:http://v3.bootcss.com/examples/starter-template/中把bootstrap核心的js放在了文档的尾部,并没有放在head里面,说是会加快加载速度,这是为啥?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
由于页面是单线程的,当脚本的位置在head中时,且没有添加async或者defer的话,脚本就会被下载或者执行。这回阻塞页面的渲染。如果脚本的执行时间过长,或者出现错误时等情况时,都会导致页面有一段空白期,这样给用户造成页面没加载的错觉。这无疑对用户体验来说是糟糕的。当脚本放在body的最下面加载时。当脚本执行的时候,那就说明页面的dom树已经渲染完成。能程序一个较完整的页面给用户。这也就是用户感觉加载快了的原因。
我认为原因主要有两点。
浏览器发出请求,得到响应后,会解析
HTML
并识别出更多的资源(比如样式表、脚本、图片等),然后浏览器开始获取这些资源,并尽快开始渲染页面。1、在浏览器获取更多资源的时候:HTTP规范推荐浏览器每次从同一个域名中最多只能同时下载两个文件(这大概也是很多网站把图片或者脚本单独存放在别的域名下的原因),很多现代浏览器可以同时下载更多的资源。但是尽管如此,当浏览器在下载脚本期间,不会下载其他任何文件,即使是来自不同域名的文件,所有其他资源都要等到脚本加载完毕后才能下载。当下载外链的脚本时,请求的时间、网络延迟、带宽限制都会影响速度。
2、在浏览器渲染页面的时候:如果页面中外链了
CSS
或脚本文件,浏览器会等这些文件加载和解析(如果是javascript
代码,则还需要执行)完再渲染页面,也就是页面的渲染会被阻塞。而页面暂停渲染在用户看来就是卡顿。另外,虽然样式表也会导致页面缓慢,但是它只需要加载并解析,而不需要执行,并且让页面内容在渲染时直接展现最终的样式也是大家认为比较友好的方式,所以一般会把样式表放在页面的头部,而把
javascript
放在</body>
之前。在
github
上有一个可以异步加载样式表的脚本也可以参考和使用:https://github.com/filamentgroup/loadCSS浏览器在下载js的时候,会阻塞页面渲染,放在尾部会先显示页面再加载js,百度一下即可。
浏览器加载js是同步加载,如果放在head里,会阻塞其它文件的加载及dom渲染,如果dom节点还没加载完成,且js里有引用某个dom节点,会报错。
楼上的回答也有失偏颇,不一定所有的js都必须放在footer中,如果涉及到页面渲染方面的js还是必须放在head中,比如: