<script>标签async属性和defer属性的使用

  使用前提:async和defer只适用于外联JS文件(即有src属性),如果没有src属性使用这两个属性是没有意义的。
 
 
 
  相同点
 
  async和defer都是开启子线程下载JS文件,所以在下载过程中都不会阻塞页面渲染。
 
 
 
  不同点
 
  async在JS文件下载完成后会立即抢占主线程开始执行,在执行JS这段时间内会阻塞页面渲染。
 
  defer在JS文件下载完成后会进入等待状态,直到页面渲染完毕才开始执行JS。
 
  async无法保证多个JS文件之间的执行顺序(即存在依赖问题),并且无法操作DOM结点(因为不知道页面渲染进度)。
 
  defer是页面渲染完毕才开始执行的,所以可以操作DOM结点,并且多个JS文件没有依赖问题(按出现顺序执行)。
 
 
 
  总结
 
  async适用于和DOM无关的JS文件(如流量统计),如果要操作DOM则应该用defer。

Copyright © 2024 码农人生. All Rights Reserved