JS延迟加载的几种方式

缺乏、安全感 2023-07-19 15:27 154阅读 0赞

JS延迟加载,也就是等页面加载完成之后再加载 JavaScript 文件。有助于提高页面加载速度。

一般有以下几种方式:

1:defer 属性,async 属性
2:动态创建DOM方式
3:使用jQuery的getScript方法
4:使用setTimeout延迟方法
5:让JS最后加载

1. defer 属性

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <script src="test1.js" defer="defer"></script>
  5. <script src="test2.js" defer="defer"></script>
  6. </head>
  7. <body>
  8. <!-- 这里放内容 -->
  9. </body>
  10. </html>

说明:虽然 script 元素放在了 head元素中,但包含的脚本将延迟浏览器遇到 /html 标签后再执行。

HTML5规范要求脚本按照它们出现的先后顺序执行。在现实当中,延迟脚本并不一定会按照顺序执行。

defer属性只适用于外部脚本文件。支持 HTML5 的实现会忽略嵌入脚本设置的 defer属性。

2. async 属性

HTML5 为 script标签定义了 async属性。与defer属性类似,都用于改变处理脚本的行为。同样,只适用于外部脚本文件。
目的:不让页面等待脚本下载和执行,从而异步加载页面其他内容。

异步脚本一定会在页面 load 事件前执行。
不能保证脚本会按顺序执行。

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <script src="test1.js" async></script>
  5. <script src="test2.js" async></script>
  6. </head>
  7. <body>
  8. <!-- 这里放内容 -->
  9. </body>
  10. </html>

async和defer一样,都不会阻塞其他资源下载,所以不会影响页面的加载。
缺点:不能控制加载的顺序

3.动态创建DOM方式

  1. //这些代码应被放置在</body>标签前(接近HTML文件底部)
  2. <script type="text/javascript">
  3. function downloadJSAtOnload() {
  4. varelement = document.createElement("script");
  5. element.src = "defer.js";
  6. document.body.appendChild(element);
  7. }
  8. if (window.addEventListener)
  9. window.addEventListener("load",downloadJSAtOnload, false);
  10. else if (window.attachEvent)
  11. window.attachEvent("onload",downloadJSAtOnload);
  12. else
  13. window.onload =downloadJSAtOnload;
  14. </script>

4.使用jQuery的getScript()方法

  1. $.getScript("outer.js",function(){//回调函数,成功获取文件后执行的函数
  2. console.log("脚本加载完成")
  3. });

5.使用setTimeout延迟方法

6.让JS最后加载

把js外部引入的文件放到页面底部,来让js最后引入,从而加快页面加载速度

发表评论

表情:
评论列表 (有 0 条评论,154人围观)

还没有评论,来说两句吧...

相关阅读

    相关 lazyload.js延迟

    图片延迟加载 互联网加载图片很多,需要用户看到的先加载,所以使用延迟加载 首先引入juery和js:jquery.lazyload.js, 简单的方法是在img标签上添加

    相关 js延迟方法

    这是一个面试经常问到的问题:js的延迟加载方法 (js的延迟加载有助与提高页面的加载速度) 主要考察对程序的性能方面是否有研究,程序的性能是一个项目不断地追求的,通常也是项目

    相关 JS延迟

    今天写一个很简单的JS代码的时候遇到一个问题,就是第一次获取H5里的class数目永远都是为0,找了很久后来发现的JS的加载顺序问题。因为很多时候都是把JS文件放在head里,