JS脚本若不延迟加载,则会阻断dom渲染,去下载解析运行js。
1、推迟执行脚本(defer)
在<script>标签内添加“defer”属性,脚本会立即下载,但是会被延迟到整个文档都解析和显示完毕之后再执行。只对外部脚本有效。
<script defer src="example1.js"></script>
2、异步执行脚本(async)
在<script>标签内添加“async”属性,同“defer”一样,表示立即开始下载脚本,但不能阻止其他页面动作,在解析文档时同时下载脚本,下载完成后,然后去执行js脚本,执行完再继续解析HTML。只对外部脚本有效。
<script async src="example1.js"></script>
3、脚本放至页面底部
将所有的js引用放在<body>元素中的最后面,这样一来,页面会在处理js代码之前完全渲染页面,用户会感觉页面加载更快了,因为浏览器显示空白页面的时间更短了。
相关拓展
HTML5要求脚本应该按照他们出现的顺序执行。对于添加了“defer”属性的<script>,脚本文件依然顺序执行。但是若添加的是“async”属性,意味着告诉浏览器谁先下载完谁先执行,不必等到该异步脚本下载和执行后再加载其它脚本。
另,对于以<link>链接方式引入的外部CSS文件,是谁先加载完谁先执行,不一定是顺序执行。