详解JS异步加载的三种方式

yizhihongxing

详解JS异步加载的三种方式

JS异步加载指的是JavaScript代码在浏览器中执行时,通过非阻塞IO的方式,使得代码的执行不会阻塞页面的渲染和交互,从而提升用户体验。而JS异步加载的方式主要有以下三种:

1. defer

使用 defer 属性可以将脚本的加载推迟到文档的解析和显示完成之后再执行。这个过程会是解析 HTML 文档和执行 JS 脚本并行进行的,因此当 JS 脚本被执行时,整个 DOM 树仍然是完整的,可以立即操作。

<!DOCTYPE html>
<html lang="en">
<head>
    <title>defer demo</title>
    <script defer src="main.js"></script>
</head>
<body>
    <h1>defer demo</h1>
    <p>Some content</p> 
</body>
</html>

上述代码中,main.js 的加载和执行被推迟到了整个 HTML 文档加载完毕后,也就是在 DOMContentLoaded 事件触发前。在这个时候,DOM 树已经构建完毕,main.js 可以操作文档中的元素。

2. async

与 defer 不同,使用 async 属性可以让脚本异步加载并执行。当浏览器遇到 async 属性时,会在文档加载和渲染的同时,异步加载并执行脚本,从而不会阻塞页面的渲染和交互。但与此同时,由于 JavaScript 的异步执行特性,脚本的加载和执行顺序不能保证,因此使用 async 属性的脚本一般不能依赖于页面的其他元素。

<!DOCTYPE html>
<html lang="en">
<head>
    <title>async demo</title>
</head>
<body>
    <h1>async demo</h1>
    <p>Some content</p> 
    <script async src="main.js"></script>
</body>
</html>

在上述示例中,main.js 异步加载并执行,不会阻塞页面的渲染。但是需要注意的是,如果页面上还存在其他 JS 脚本,那么它们的加载和执行也是异步的,且顺序不可预知,可能会造成一些难以预料的问题。

3. 动态插入

动态插入 JavaScript 脚本是一种常见的异步加载方式。在页面上预留好一个 script 标签,然后使用 JavaScript 动态插入具体的脚本路径,即可实现异步加载。

<!DOCTYPE html>
<html lang="en">
<head>
    <title>dynamic load demo</title>
</head>
<body>
    <h1>动态加载 JavaScript</h1>
    <p>使用JS动态加载main.js文件</p>
    <script>
        var script = document.createElement('script');
        script.src = 'main.js';
        document.body.appendChild(script);
    </script>
</body>
</html>

在上述示例中,通过 JavaScript 动态地创建一个 script 元素,并将其 src 属性设置为 main.js 的路径。然后通过 document.body.appendChild 方法将该元素插入到文档中即可实现异步加载。需要注意的是,这种方式也是无法保证多个脚本的执行顺序的。

综上所述,以上三种方式都能实现 JS 的异步加载。需要根据具体场景的要求,选择适合的一种方式来使用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解JS异步加载的三种方式 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • Json按某个键的值进行排序

    针对“Json按某个键的值进行排序”,以下是完整攻略: 1. 确定排序依据的键名 首先需要明确按照哪个键进行排序,也就是要确定排序依据的键名。假设我们需要对以下的JSON数据按照id进行升序排序: [ {"id": 2, "name": "Lucy"}, {"id": 1, &q…

    JavaScript 2023年6月11日
    00
  • AutoJs4.4.1免费版快速接通vscode调试脚本的操作方法

    下面是“AutoJs4.4.1免费版快速接通vscode调试脚本的操作方法”的完整攻略: 操作方法 安装AutoJs4.4.1免费版 首先需要安装AutoJs4.4.1免费版,可以在官网或者GitHub上下载相应的安装包。安装完成后,打开AutoJs应用。 安装AutoJs插件 在VSCode中,搜索安装“AutoJs插件”,下载安装后重新启动VSCode。…

    JavaScript 2023年6月11日
    00
  • 微信小程序全局文件的使用详解

    微信小程序全局文件的使用详解 什么是微信小程序全局文件 微信小程序中,全局文件是指 app.js、app.json 和 app.wxss,它们分别用于配置小程序的全局信息、全局样式和全局脚本。这些文件都处于小程序的根目录下,并且是小程序初始化时自动载入的,所以我们可以在全局文件中定义小程序的整体风格和功能。 app.json app.json 是小程序的全局…

    JavaScript 2023年6月11日
    00
  • 详谈 Jquery Ajax异步处理Json数据.

    下面是详谈 Jquery Ajax异步处理Json数据 的完整攻略。 什么是Ajax异步处理? Ajax是异步JavaScript和XML的缩写,它是一种用于创建快速动态网页的技术。它通过在后台与服务器进行少量数据交换,实现网页局部更新。 Jquery的Ajax实现 Jquery是一款JS库,兼容性好、语法简单,而且自带Ajax实现。使用Jquery的Aja…

    JavaScript 2023年5月27日
    00
  • JS表单传值和URL编码转换

    JS表单传值和URL编码转换是前端开发经常遇到的问题,接下来我将详细讲解这个话题的完整攻略。 表单传值 使用JS实现表单传值需要先获取表单元素,再获取元素中的值。下面是一个简单的示例: <!– HTML部分 –> <form id="myForm"> <input type="text&quot…

    JavaScript 2023年5月19日
    00
  • JavaScript对数字的判断与处理实例分析

    下面是对JavaScript对数字的判断与处理实例分析的详细攻略。 什么是数字 在JavaScript中,数字(Number)是基本数据类型之一,常用来表示数值。JavaScript中的数字包括整数和浮点数。 数字的类型转换 在JavaScript中,数字类型之间可以进行自动类型转换,如将整数转为浮点数,将数字转为字符串等。 另外,我们可以使用 parseI…

    JavaScript 2023年5月28日
    00
  • 详解JavaScript节流函数中的Throttle

    以下是详解 JavaScript 节流函数中的 Throttle 的攻略。 1. 什么是节流函数? 节流函数(throttle function)是一种能够控制函数执行频率的函数。通过指定一个时间间隔,来限制函数的执行次数。可以防止因为某些操作过于频繁导致浏览器卡顿或崩溃的问题,提高了页面的性能和用户的体验。 2. Throttle 的实现方式 Thrott…

    JavaScript 2023年6月10日
    00
  • Layui事件监听的实现(表单和数据表格)

    概述: Layui是一个轻量级的前端UI框架,其特点是注重结构化,适度封装与扩展性,而且非常适合大型的前端应用开发。在Layui中,实现事件监听是非常重要的一部分。本文将详细介绍Layui事件监听的实现,包括如何监听表单提交事件、数据表格行操作事件等常见事件,同时提供完整的代码示例进行说明。 Layui表单提交事件监听: 在Layui提交表单的过程中,可以通…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部