当前位置: 首页 > news >正文

【前端】JS异步加载

文章目录

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

为什么要异步加载

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

原因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)

http://www.lryc.cn/news/22046.html

相关文章:

  • 【MySQL】SQL语言的五个部分
  • 详细的IO面试题汇总
  • 在Linux终端管理你的密码!
  • 【设计模式】策略模式在Java工程中应用
  • Linux驱动开发工程师需要掌握哪些技能?
  • 【人脸识别】FROM:提升遮挡状态下的人脸识别效果
  • 浏览器缓存
  • 【软考 系统架构设计师】论文范文③ 论数据访问层设计技术及其应用
  • 802.11 MCS 的最低SNR分析
  • 用于C++的对象关系映射库—YB.ORM
  • Cesium 100K数据加载 支持弹窗 动态更改位置
  • MySQL管理表
  • 【Java 面试合集】打印一个int整数的32位表示
  • 这样在管理后台里实现 403 页面实在是太优雅了
  • c++提高篇——STL常用算法
  • Materials - DistanceField Nodes
  • 【ARMv8 编程】ARMv8 指令集介绍
  • 大数据之Phoenix基本介绍
  • 算法leetcode|38. 外观数列(多语言实现)
  • 异步交互的关键——Ajax
  • Android自定义View实现打钩签到动画
  • python+pytest接口自动化(3)-接口测试一般流程及方法
  • 《MySQL学习》 表中随机取记录的方式
  • 功率信号源有什么作用和功能呢
  • 一些cmake error fixed
  • CentOS 7安装Docker并使用tomcat测试
  • 隐私计算头条周刊(2.20-2.26)
  • 安装kibana 报错/访问不了
  • 【华为OD机试模拟题】用 C++ 实现 - 身高排序(2023.Q1)
  • MK60DX256VLQ10(256KB)MK60DN256VLQ10 Kinetis K60 MCU FLASH