JS的异步加载的三种方法

为什么要引入异步加载JS

先来了解两个线程一个叫GUI渲染线程,一个JS引擎线程。GUI渲染线程负责负责渲染浏览器界面,解析HTML,CSS,构建DOM树和RenderObject树,布局和绘制等。JS引擎线程负责JS引擎线程负责解析Javascript脚本,运行代码。注意:GUI渲染线程与JS引擎线程是互斥的
所以当浏览器解析器遇到<script>标签时会立即加载(加载:下载,解析和执行),浏览器对其他资源和文档的加载会停止。为了提高页面的加载速度,得让JS不阻塞其他资源的加载。提高页面加载速度的最简单快速的方法就是将脚本文件放到body底部。但这并不是提高页面加载速度最优方案的方案

defer属性

defer异步加载:dom文档全部被解析完才会执行JS,只有IE能用

<script type="text/javascript" src="tool.js" defer="defer">
var a =3;
</script>

等文档完成解析完成后会按照他们在文档出现顺序再去下载解析。也就是说defer属性的<script>就类似于将<script>放在body的效果。

async属性

async属性是HTML5新增的属性,IE10和浏览器都是支持该属性的。该属性的作用是让脚本能异步加载,也就是说当浏览器遇到async属性的<script>时浏览器加载css一样是异步加载的。一般用于外部脚本文件.当同时存在defer和async,defer的优先级更高

<script type="text/javascript" src="tool.js" async="async">
</script>

创建script标签标签插入dom中按需操作

<script>
    var script = document.createElement('script');
    script.type = 'text/javascript'
    script.src = 'demo.js';
    document.head.appendChild(script);
</script>    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值