文章目录

  • 为什么要异步加载
  • 如何实现异步加载
  • 参考

为什么要异步加载

两个原因其实是一个意思。

原因1:

JS是单线程的语言,它会同步的执行代码,从上往下执行
但是,一旦网络不好,或要加载的js文件过大的话,会造成页面阻塞,不利于后续的渲染工作,十分影响交互体验,此时,可以使用异步加载的方法解决这个问题。

原因2:

浏览器在解析HTML时,遇到script会先执行JS脚本,再构建DOM树。

原因是:

JS的作用之一是操作并修改DOM,若等到DOM树构建完成再渲染并执行JS,会造成严重的回流和重绘

但在如今的开发模式中,JS往往比HTML内容更多,处理时间更长。若先执行完JS再执行HTML,会造成页面的解析阻塞,在JS执行完成之前,用户在页面上什么也看不到。这样是不好的。

因此,我们要用异步加载解决这个问题。

如何实现异步加载

  • async
  • defer
  • 动态创建script标签

举例说明:

没有defer或async,浏览器会立即加载并执行指定的脚本。

<script src="script.js"></script>

async,加载和渲染后续文档元素的过程 与 script.js的加载和执行 并行(这就是异步

<script async src="script.js"></script>

defer,加载和渲染后续文档元素的过程 与 script.js的加载和执行 并行,但是,script.js的执行要在所有元素解析完成之后,DOMContentLoaded事件触发之前完成。

<script defer src="myscript.js"></script>

如图:


绿色:HTML解析。
蓝色:网络请求脚本。
红色:执行脚本。

由图可知:

  • 若没有deferasync,当代码执行到script标签,就进行网络请求脚本和执行脚本,HTML的解析会停掉
  • 若有defer,会在HTML继续解析的同时网络请求脚本,并且在HTML解析完成之后执行脚本
  • 若有async,会在HTML继续解析的同时网络请求脚本,且脚本一旦下载完成就执行

由此可以看出asyncdefer的区别:执行脚本的时机不同。async在下载完成后立马执行js,而defer在HTML解析完成后执行js。

参考

如何实现JS异步加载 - 简书 (jianshu.com)

javascript异步加载的三种方式以及如何动态创建script标签_Choo01的博客-CSDN博客_动态script

【JavaScript高级】浏览器原理:渲染引擎解析页面步骤、回流和重绘、composite合成、defer与async_karshey的博客-CSDN博客

defer和async的区别(面试被问到了) - 掘金 (juejin.cn)

js异步加载——defer和async的区别 - sakuramoon - 博客园 (cnblogs.com)

【前端】JS异步加载相关推荐

  1. 知识点讲解五:处理js异步加载问题

    文章目录 前言 环境 代码思路 原代码 前言 在新闻网站中大多采用的是异步加载模式,新闻条目会随滚动条的滚动而逐渐加载.当爬虫访问这类网站时得到的HTML数据仅仅是我们看到的页面数据,只有当我们向下滚 ...

  2. turn.js异步加载实现翻书效果

    <div class="m-art-cont"><script type="text/javascript" src="/Runti ...

  3. 实现JS异步加载的三种方法

    一.为什么要写异步加载: ①js加载本身是属于同步加载的,加载js文件会阻塞文档,一旦网速不好,那么整个网站将等待js加载而不进行后续渲染等工作.但是有些工具方法需要按需加载,有一些工具js文件它是不 ...

  4. JS 异步加载js的三种方案

    js文件同步加载的缺点: 页面的js文件一般是同步加载,加载到js文件会阻断html和css的加载,要等到js文件加载完毕,才能继续向下执行,因为js文件可能会操作html和css:但有些js文件不会 ...

  5. js延迟加载、js异步加载

    1.js延迟加载     (1)js延迟加载是js性能优化的一种方式     (2)作用:为了提高网页的加载速度     (3)原理:等网页加载完成之后再加载js文件         ··需要优化的原 ...

  6. JS异步加载及解决方式

    1.js中的同步加载和异步加载有什么不同? javascript语言是单线程机制.所谓单线程就是按次序执行,执行完一个任务再执行下一个. 对于浏览器来说,也就是无法在渲染页面的同时执行代码. 同步加载 ...

  7. turn.js 异步加载实现翻书效果

    1.阅读翻书js /*** 电子翻书*/ //var width = 1080; //var height = 1680;var width = "10rem"; var heig ...

  8. yepnope.js 异步加载资源文件

    yepnope.js是一个能够根据输入条件来选择性异步加载资源文件的js脚本,可以在页面上仅加载用户需要的js/css. yepnope的优点: 可以同时处理javascript以及css 能够按条件 ...

  9. yepnope.js – 异步加载资源文件

    yepnope.js是一个能够根据输入条件来选择性异步加载资源文件的js脚本,可以在页面上仅加载用户需要的js/css. 典型代码示例 yepnope({test : Modernizr.geoloc ...

最新文章

  1. 类加载器双亲委派模式
  2. Docker多台宿主机间的容器互联-centos7
  3. wxWidgets:使用 wxWidgets 资源文件XRC
  4. linux之GPIO的使用
  5. java deep clone util_Java Clone深拷贝与浅拷贝的两种实现方法
  6. leetcood学习笔记-226- 翻转二叉树
  7. 数据分析 超市条码_郑州科脉助力和美超市店面软件升级智赢
  8. 【elasticsearch】ES 单分片使用 From/Size 分页遇到重复数据
  9. 从0到1带你手撸一个请求重试组件,不信你学不会!
  10. CentOS 6.8 编译安装MySQL5.5.32
  11. 「行业化、产业化、专业化」,解析中科曙光眼中的大数据现状和未来
  12. IT服务管理领域的最佳实践知识体系ITIL4
  13. 用photoshop将图片不失真的放大
  14. 2021英一Text4精读、背景和语法分析(网络中立是生是死?难下定论)
  15. 10月24日程序员HTML5,【通知】10月24日程序员节放假1天
  16. dB、dBm、dBw的含义和转化关系
  17. 亚马逊云科技帮助德比软件轻松应对爆发的增长
  18. linux运行直播软件,在Linux下可用Wine安装和运行虎牙直播、斗鱼直播
  19. OSChina 周日乱弹 —— 局长:怕你不爱我
  20. 【包运行】Java 实现图形界面的邮件轰炸机附带视频指导教程

热门文章

  1. 星速配资:上周三大指数上涨 煤炭板块表现强势
  2. Linux开发学习资料库
  3. spring boot 使用 grade构建
  4. 鼠标点击,移动回放效果
  5. STM8L101 与 STM8S103区别
  6. 机器翻译相关论文Topic推荐
  7. FAPI专题-3:5G nFAPI接口 - 中文规范-3- 协议栈、消息格式
  8. 小程序意见反馈界面(简洁版代码)
  9. 小程序页面跳转与意见反馈
  10. 设计师学python有意义吗-如果你有设计师朋友,请对他好一些...