首页 > 编程语言 >JavaScript异步加载的三种方式——async、defer、动态创建

JavaScript异步加载的三种方式——async、defer、动态创建

时间:2022-09-28 16:14:31浏览次数:49  
标签:defer 异步 script JavaScript 动态创建 JS async 加载

async和defer

html4.0中定义了defer;html5.0中定义了async。

如果没有defer和async,浏览器会立即加载并执行指定的JS脚本,并不会等待后续载入的文档元素。

如果有async,加载后续文档元素的过程中,将和JS的加载与执行,并行进行(异步)。

如果有defer,加载后续文档元素的过程中,将与JS的加载,并行进行(异步)。但JS的执行,要等到所有的文档元素解析完成之后,DOMContentLoaded事件触发之前完成。

代码如下:

<script async src="/xxx.js"> // async方式加载js文件
<script defer src="/xxx.js"> // defer方式加载js文件

async和defer的共同点:

  • 不会阻塞文档元素的加载
  • 使用这两个属性的JS脚本中,不能调用document.write方法
  • 只适用于外部脚本,把延迟脚本放在页面底部加载是最优选择

async和defer的不同点:

  • 每一个async脚本加载完毕后就会立即执行,一定会在window.onload之前执行。但可能会在DOMContentLoaded之前或者之后执行,不能保证顺序。如果JS脚本有依赖性,就需要格外注意,执行异步脚本的目的是不让页面等待脚本的下载和执行,从而异步加载页面的其他内容。因此,建议异步脚本不要在加载期间修改DOM节点。
  • 每一个defer脚本都是在文档元素完全载入之后,一般会在DOMContentLoaded之前执行,相当于window.onload,但应用上比window.onload更灵活。

动态创建script

在没有defer和async之前,异步加载的方式是动态创建script标签。

通过window.onload方法来确保页面加载完毕之后,再将script标签插入到页面中。

function addScriptTag(src) {
    var script = document.createElement('script');
    script.setAttribute('type', 'text/javascript');
    script.src = src;
    document.body.appendChild(script);
}

window.onload = function() {
    addScriptTag('./xxx.js');
}

标签:defer,异步,script,JavaScript,动态创建,JS,async,加载
From: https://www.cnblogs.com/luckest/p/16738434.html

相关文章

  • 【开发小技巧】01-如何使用JavaScript删除CSS属性?
    句法:element.removeProperty('property')实例1:<!DOCTYPEhtml><html><head><title>HowtoremoveCSSpropertyusingJavaScript?</title><style>......
  • javaScript--4 onchange 事件
    <!DOCTYPEhtml><html><head><title>事件</title></head><body><h2>----------------onchange事件--------------------</h2><!--onchange事......
  • 直播软件app开发,JavaScript应用定时器实现倒计时
    直播软件app开发,JavaScript应用定时器实现倒计时 <!DOCTYPEhtml><html><head><metacharset="UTF-8"><title></title></head><body>手机号码:<inputtype="text"/><bu......
  • 直播开发app,JavaScript生成随机数
    直播开发app,JavaScript生成随机数<scripttype="text/javascript">//产生随机数functiongetRandom(min,max){vara=Math.floor((Math.random())*(max-1+min)+min)return......
  • JavaScript面向对象详解
    JavaScript面向对象面向对象是一种编程思想(oop)。很多个具有相同属性和行为的对象就可以抽象为类,对象是类的一个实例。JavaScript在ECMAScript6中引入了类的概念。面向......
  • 3&4.javascript
                        ......
  • 在2016年如何学习JavaScript?
    在2016年如何学习JavaScript?作者:​​VincentO​​译者:相信有不少人已经读过​​在2016年学JavaScript是一种什么样的体验?​​这篇神文,那么假如你真的要在2016年开始学......
  • JavaWeb--JavaScript--2022年9月27日
    第一节  简介  第二节  JavaScript引入方式1、内部脚本:将JS代码定义在HTML页面中<!DOCTYPEhtml><htmllang="en"><head>  <meta......
  • JavaScript中Promise详解
    概述Promise(期约)对象用于表示一个异步操作的最终完成(或失败)及其结果值。Promise的使用Promise创建时需传入一个执行器函数(excutor)接受两个参数,第一个参数是内部定......
  • JavaScript DOM
    APIAPI(ApplicationProgrammingInterface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,......