下面用代码示例具体展示 async
和 defer
属性的用法,你可以直接复制到HTML文件里运行看看效果:
配合这几个JS文件内容会更直观(你可以创建对应的文件):
- normal.js
// 模拟耗时操作
setTimeout(() => {
console.log('普通加载的JS执行了');
}, 1000);
- async1.js
console.log('async1加载执行了');
- async2.js
console.log('async2加载执行了');
- defer1.js
console.log('defer1加载执行了');
- defer2.js
console.log('defer2加载执行了');
运行后你会发现:
- 普通加载的JS会让页面等它执行完才继续
- async的两个JS执行顺序不确定(谁先加载完谁先跑)
- defer的两个JS一定按顺序执行(defer1先于defer2)
- 打开控制台看输出顺序,就能清楚看到它们的区别了