JavaScript脚本异步加载的几种方式

一般而言,JavaScript脚本是建议放在body标签的底部,因为使用script标签加载JS时,会停止加载后面的内容而停下来解析脚本,并对页面进行渲染,使用script属性加载外部脚本也会造成这样的情况,这样的话,如果在head或者是body的前面放入过多的script标签,并且内容很多的时候,会造成页面在解析完所有script标签的内容前,有短暂的时间白屏(整个页面空白),给用户的体验会很差。但是如果所有的脚本都放在底部,又会造成DOM加载完毕后,有一段时间,页面虽然能看到,但是和用户的交互会很差,因此需要让一些脚本与页面,异步加载!

  1. 在html5中,script新增了async的属性,script添加了该属性之后,下载脚本时将可以与页面其他内容并行下载,但是该属性必须在IE9以上的浏览器中才可以使用,并且只能用于加载外部JS脚本
  2. 同样在html4中,也有一个defer属性,该属性的交融性更好一点,但是与async一样,可以让js脚本实现异步加载。同样只能用于加载外部脚本。
async与defer属性的不同点是:

async会让脚本在加载完可用时,立即执行,但是derfer脚本则会在DOM加载完毕后执行,defer脚本的执行会在window.onload之前,其他没有添加defer属性的script标签之后

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<script>
    window.onload= function (){
        console.log("window.onload");
    }
</script>
<script src="defer.js" defer> </script>
<script >
        console.log("hello"); 
</script>
<body>
    
</body>
</html>

显示顺序为hello , defer, window.onload

  1. 利用XHR异步加载JS内容并执行,代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<script>
 <script>
        var xhr = new XMLHttpRequest() ;
        xhr.open("get", "defer.js", true)
        xhr.send();
        xhr.onreadystatechange = function(){
            if(xhr.readystate == 4 && xhr.status == 200){
                eval (xhr.responseText);
            }
        }
            
 </script>
</script>
<body>
    
</body>
</html>  
  1. 动态创建script标签,代码如下:
 <script>
        var script = document.createElement("script");
        script.src = "defer.js";
        document.head.appendchild(script);
        
 </script>
  1. iframe方式,利用iframe加载一个同源的子页面,让子页面js影响当前父页面的一种方式
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 本文总结一下浏览器在 javascript 的加载方式。关键词:异步加载(async loading),延迟加载(...
    4ea0af17fd67阅读 1,116评论 0 2
  • 默认情况javascript是同步加载的,也就是javascript的加载时阻塞的,后面的元素要等待javascr...
    飞菲fly阅读 8,418评论 1 4
  • JavaScript脚本对现代网站来说是必不可少的。当用户访问站点,需要下载各种资源,例如JS脚本,CSS,图片,...
    张歆琳阅读 9,362评论 0 24
  • 首先我们先来看一下Script标签的各项属性: script标签也支持HTML中的全局属性: 下面我们来看看一看j...
    tobAlier阅读 1,277评论 0 2
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 28,848评论 1 45

友情链接更多精彩内容