GPU渲染进程和js引擎线程是互斥的,当js引擎执行时GPU线程会被挂起,GPU更新会被保存在一个队列中等待js引擎空闲时立即被执行,如果js执行的时间过长,会导致页面渲染被阻塞。
相同点
- 只用于外联script
- script下载和html解析并行
不同点
| 区别 | async | defer |
|---|---|---|
| 脚本执行时机 | ①下载脚本时执行脚本,可能在html解析完之前执行,如果脚本中操作了DOM可能会出错 | ①等待html解析完执行脚本 |
| 适用场景 | 脚本中不需要操作DOM,并且与其他脚本互不依赖 | 需要操作DOM的脚本,如jQuery。将脚本放到body底部和defer都是在html解析完加载,区别是defer会在html解析的过程中下载脚本 |
| 优先级 | 同时使用async、defer,async的优先级更高 |