异步加载的方式有哪些?

🌙
手机阅读
本文目录结构

问题

异步加载的方式有哪些?

答案

延迟加载:有些 js 代码并不是页面初始化的时候就立刻需要的,而稍后的某些情况才需要的。

延迟加载就是一开始并不加载这些暂时不用的js,而是在需要的时候或稍后再通过js 的控制来异步加载。

也就是将 js 切分成许多模块,页面初始化时只加载需要立即执行的 js ,然后其它 js 的加载延迟到第一次需要用到的时候再加载。

特别是页面有大量不同的模块组成,很多可能暂时不用或根本就没用到。

就像图片的延迟加载,在图片出现在可视区域内时(在滚动条下拉)才加载显示图片。

  1. onload 时的异步加载 ;

  2. DOMContentLoaded 异步加载;也就是$(document).ready;需要引用jquery,兼容所有浏览器。

DOMContentLoadedonload 事件

DOMContentLoaded : 页面(document)已经解析完成,页面中的dom元素已经可用。但是页面中引用的图片、subframe可能还没有加载完。

onload :页面的所有资源都加载完毕(包括图片)。浏览器的载入进度在这时才停止。

这两个时间点将页面加载的timeline分成了三个阶段。 
  1. 动态创建<script>标签;
<script type="text/javascript">
        (function(){
                var s = document.createElement('script');
                s.type = 'text/javascript';
                s.src = "http://code.jquery.com/jquery-1.7.2.min.js";
                var tmp = document.getElementsByTagName('script')[0];
                tmp.parentNode.insertBefore(s, tmp);
        })();
</script>
  1. 定时器;延迟加载js代码
<script id=”my”></script> 
<script> 
  setTimeout(document.getElementById('my').src='include/index.js',3000);//延时3秒 
</script> 
  1. AJAX eval(使用AJAX得到脚本内容,然后通过 eval_r(xmlhttp.responseText)来运行脚本);兼容所有浏览器。

  2. iframe方式,兼容所有浏览器。

  3. <script>标签的async="async"属性;async的定义和用法(是HTML5的属性);async 属性规定一旦脚本可用,则会异步执行。

    1. <script type="text/javascript" src="CSS CSS XXXXXXX.js" async="async"></script>

    2. HTML5中新增的属性,Chrome、FF、IE9&IE9+均支持(IE6~8不支持)。此外,这种方法不能保证脚本按顺序执行。

    3. async 属性仅适用于外部脚本(只有在使用 src 属性时)。

  4. <script>标签的defer="defer"属性;defer 属性规定是否对脚本执行进行延迟,直到页面加载为止。

有的 javascript 脚本 document.write 方法来创建当前的文档内容,其他脚本就不一定是了。

如果您的脚本不会改变文档的内容,可将 defer 属性加入到 <script> 标签中,以便加快处理文档的速度。

因为浏览器知道它将能够安全地读取文档的剩余部分而不用执行脚本,它将推迟对脚本的解释,直到文档已经显示给用户为止。

<script type="text/javascript" defer="defer"> 
  alert(document.getElementById("p1").firstChild.nodeValue); 
</script>

兼容所有浏览器。此外,这种方法可以确保所有设置defer属性的脚本按顺序执行。

更多面试题

如果你想了解更多的前端面试题,可以查看本站的WEB前端面试题 ,这里基本包涵了市场上的所有前端方面的面试题,也有一些大公司的面试图,可以让你面试更加顺利。

面试题
HTML CSS JavaScript
jQuery Vue.js React
算法 HTTP Babel
BootStrap Electron Gulp
Node.js 前端经验相关 前端综合
Webpack 微信小程序 -

这些题库还在更新中,如果你有不错的面试题库欢迎分享给我,我整理后放上来;人人为我,我为人人,互帮互助,共同提高,祝大家都拿到心仪的Offer!

AXIHE / 精选资源

浏览全部教程

面试题

学习网站

前端培训
自己甄别

前端书籍

关于朱安邦

我叫 朱安邦,阿西河的站长,在杭州。

以前是一名平面设计师,后来开始接接触前端开发,主要研究前端技术中的JS方向。

业余时间我喜欢分享和交流自己的技术,欢迎大家关注我的 Bilibili

关注我: Github / 知乎

于2021年离开前端领域,目前重心放在研究区块链上面了

我叫朱安邦,阿西河的站长

目前在杭州从事区块链周边的开发工作,机械专业,以前从事平面设计工作。

2014年底脱产在老家自学6个月的前端技术,自学期间几乎从未出过家门,最终找到了满意的前端工作。更多>

于2021年离开前端领域,目前从事区块链方面工作了