无阻塞式加载脚本-延迟脚本
在script标签上添加defer(延迟脚本)或者async(异步脚本)属性。
- 相同点:都是并行加载脚本资源,下载过程不阻塞DOM渲染。
- 不同点:在于执行时机,async时浏览器立即异步下载文件,不同于defer的是下载完文件后会立即执行,
此时会阻塞DOM的渲染,所以async的script最好不要操作dom。因为是下载完立即执行,所以不能保证多个脚本加载时的先后顺序。 defer是等页面加载完成后再执行,也就是说,脚本会被延迟到整个页面都解析完成后再执行。即浏览器渲染页面,读取到包含defer属性的外部script标签时,不会停止DOM的渲染,而是异步下载,等加载完整个页面后再执行js。有多个defer的标签时,会按照顺序下载执行,defer仅当src属性声明时才生效。
网友评论