React 前端导航

前端优化,script异步加载,deffer 与 async 的作用与区别

前端优化,script异步加载,defer 与 async 的作用与区别

前端优化中有一项优化方式,就是延迟 js 脚本的加载与执行,因为 js 脚本的执行会阻塞页面渲染,为了尽快让用户看到界面,我们通常会延迟或异步 javascript 的代码执行。
其中常用的方式就有直接将 script 标签移动至 body 标签之后、使用 script 标签的 defer 属性 或 async 属性。

为什么 javascript 会阻塞页面渲染

简单的说就是因为 js 在执行过程中很有可能会查询修改 dom,如果同时运行的话很大概率会出现查询修改的 dom 还未渲染导致出错。

defer 的作用

defer 属性使用来告诉浏览器该 scirpt 应该在文档解析完成之后,在触发 DomContentLoaded 事件之前执行。
这个属性只针对外链 script 脚本有效果,对内嵌的 js 脚本没有用(也就是对没有 src 属性的 script 标签没有用)。

async 的作用

async 属性告诉浏览器异步执行该 js 脚本,先把脚本下载下来,在合适的时候在执行。
脚本的执行一定会在页面的 load 事件之前,但在 DOMContentLoaded 事件触发之前或之后执行都有可能。async 属性同样对内嵌的 js 脚本无效。

注意:标记为 async 的 js 脚本不保证脚本之间的执行先后顺序,所以必须确保异步执行的脚步是独立的,不依赖于其他异步的脚本

defer 与 async 的异同

① defer 和 async 都是异步去加载外部 JS 脚本。

② async 是在外部 JS 加载完成后,浏览器空闲时,Load事件触发前执行;而 defer 是在JS加载完成后,整个文档解析完成后执行。

③ defer 更像是将 script 标签放在 body 标签之后的效果,但是因为他是异步加载 JS 文件,所以可以节省部分时间。

声明:本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。邮箱:farmerlzj@163.com。 本站原创内容未经允许不得转载,或转载时需注明出处: 内容转载自: React前端网:https://qianduan.shop/blogs/detail/44
想做或者在做副业的朋友欢迎加微信交流:farmerlzj,公众号:生财空间站。

#js#script标签#defer#async

相关推荐

原型与原型链、继承

原型与原型链、继承简单实现

浏览器中的js事件循环(Event loop)

本文将简述浏览器中的js事件循环机制,帮助我们理解浏览器环境js代码是如何运行的。Javascript的一大特点是单线程,也就意味着同一时间他只能做一件事。事件循环(Event Loop)是为了协调事件,用户交互,UI渲染,网络处理等行为,防止线程阻塞而诞生的。