如何异步加载js?异步加载js的方法介绍

如何异步加载js?本篇文章就给大家介绍三种异步加载js的方法,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。【视频教程推荐:javascript视频教程】

js加载时间线

它是根据js出生的那一刻开始记录的一系列浏览器按照顺序做的事,形容的就是加载顺序,可以用来优化什么东西,理论基础,背下来.

1、创建Document对象,开始解析web页面。解析HTML元素和他们的文本内容后添加Element对象和Text节点到文档中。这个阶段document.readyState = ‘loading’。(生成document对象,document状态位变为loading) 

2、遇到link外部css,创建线程加载,并继续解析文档。

3、遇到script外部js,并且没有设置async、defer,浏览器加载,并阻塞,等待js加载完成并执行该脚本,然后继续解析文档。 

4、遇到script外部js,并且设置有async、defer,浏览器创建线程加载,并继续解析文档。 对于async属性的脚本,脚本加载完成后立即执行。(异步禁止使用document.write())

document.write():特别特殊他是把里面的东西当成HTML文档输出到页面里去,但是有一点就是,有的时候,当你整个文档全部都解析的差不多的时候再用document.write()的话会把你之前所有的文档流都清空,用它里面的文档流代替

例:整个页面只显示a,这里的document.write();在这里有消除文档流的功能,连script都消除了。

登录后复制

    window.onload = function(){        document.write('a');    }

登录后复制

5、遇到img等,先正常解析dom结构,然后浏览器异步加载src,并继续解析文档。

6、当文档解析完成,document.readyState = ‘interactive’。

先解析完,再加载完,然后状态位变为interactive(活跃)

查看状态位的转换:

console.log(document.readyState);document.onreadystatechange = function(){     console.log(document.readyState);}

登录后复制

7、文档解析完成后,所有设置有defer的脚本会按照顺序执行。(注意与async的不同,但同样禁止使用(document.write());

8、document对象触发DOMContentLoaded事件,这也标志着程序执行从同步脚本执行阶段,转化为事件驱动阶段。

例1:同时打印出a和complete,而且onDOMContentLoaded是不好使的,只有绑定在addEventListener才好用。

console.log(document.readyState);document.onreadystatechange = function(){     console.log(document.readyState);}document.addEventListener('DOMContentLoaded',function(){      console.log('a');},false)

登录后复制

例2:window.onload和下面这个的区别

$(document).ready(function(){    //当DOM解析完就执行的部分(不用加载完,加载完是给用户看的,对于我们来说解析完就可以操作了)    /*它的原理就是interactive和DOMContentLoaded事件*/})

登录后复制

区别就是:window.onload满需要都加载完,但是它解析完就可以操作了(这是jQuery的方法)

例3:当把script放在上面时候最好这样写,不要写onload,千万不要写onload,但是最好的方法还是写在下面

        lottery            document.addEventListener('DOMContentLoaded',function(){            var p = document.getElementsByTagName('p')[0];            console.log(p);        },false)        script标签写在上面又能处理下面的代码,而且效率还高,因为登高DOM解析完就执行,而不是DOM加载完//script标签写在上面又能处理下面的代码,而且效率还高,因为登高DOM解析完就执行,而不是DOM加载完

登录后复制

9、当所有async的脚本加载完成并执行后、img等加载完成后,document.readyState = ‘complete’,window对象触发load事件。

10、从此,以异步响应方式处理用户输入、网络事件等。
总结就是三个点:先生成document对象,代表js可以运行了,第二步就是文档解析完了,第三步就是文档加载完了并且执行完了 

下面我们看看异步加载js的三种方式:

异步加载js的方法:

1)、async   HTML5的属性,让JavaScript代码进行异步加载


登录后复制

2)defer   老版本IE专用


登录后复制

3)动态的创建script的标签(可以解决兼容h5以及低版本ie的问题),代码如下:

            function asyncLoaded(url,callback){                var script = document.createElement("script");//                script.src = url;   假如说网速非常好,直接执行完成了,后面就监听不到状态的改变了                if(script.readyState){                    script.onreadystatechange = function(){                        if(script.readyState == "complete" || script.readyState =="loaded"){//                            执行某个函数                            callback()                        }                    }                }else{                    script.onload = function(){//                        执行某个函数                        callback()                    }                }                script.src = url;    //异步的过程                document.head.appendChild(script)                }            asyncLoaded("05.js",function(){                fn()          //05.js中的函数            })        

登录后复制

以上就是本篇文章的全部内容,希望能对大家的学习有所帮助。更多精彩内容大家可以关注【创想鸟】相关教程栏目!!!

以上就是如何异步加载js?异步加载js的方法介绍的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2734807.html

(0)
上一篇 2025年3月8日 01:09:34
下一篇 2025年3月8日 01:09:39

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • js如何获取DOM节点到浏览器顶部或左侧的距离

    js如何获取dom节点到浏览器顶部或左侧的距离?本篇文章就给大家介绍js获取dom节点到浏览器顶部或左侧距离的方法,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 关于js获取dom 节点到浏览器顶或左部的距离,Jquery…

    编程技术 2025年3月8日
    200
  • 如何利用原生js简单封装confirm弹出框

    由于项目需要,做了一个超级简单的弹出框,一打开页面就弹出弹出框。由于项目总监说要尽量小(少引入封装的文件包),所以采用原生js(发现网上基本上都是用jquery做的),话不多说,上代码吧 nbsp;html>        登录确定提…

    编程技术 2025年3月8日
    200
  • JS实现分享页面自动关闭效果

    本篇文章给大家带来的内容是关于js实现分享页面自动关闭效果,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。【推荐教程:javascript教程】 通常我们在分享内容后,会有个新的窗口提示分享成功,然后倒计时关闭窗口。 要实现…

    2025年3月8日
    200
  • js是前端还是后端

    javascript是前端开发语言,是一种动态类型、弱类型、基于原型的语言;javascript经常与html、css技术一起构成前端开发,javascript一般通过ajax与后台进行数据交互。 本文操作环境:Windows7系统、Del…

    2025年3月8日
    200
  • js和jquery的区别是什么

    js和jquery的区别:1、js是网页脚本语言,而jquery是基于js语言封装出来的一个前端框架;2、jquery对象比js对象多了“$()”;3、js里面操作样式的关键字是style,而jquery里面操作样式的关键字是css。 Ja…

    2025年3月8日
    200
  • js如何将json字符串转换为json对象

    本篇文章给大家带来的内容是介绍使用js将json字符串转换为json对象的方法,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 JSON字符串: var str1 = ‘{ “name”: “cxh”, “sex”: “ma…

    编程技术 2025年3月8日
    200
  • js如何实现递归函数

    js中的递归函数就是指的是在代码中调用自身的函数,它具有三个特征分别是当输入错误时发生终止的终止条件,基本案例它是递归函数的目标,递归即函数实现的功能 递归函数指的一个函数调用自身函数,接下来在文章中为大家分享的是在js中如何实现递归函数,…

    2025年3月8日
    200
  • js开发之动态修改网页元素样式

    本篇文章中主要讲述的是js修改网页元素样式的代码示例,具有一定参考价值,感兴趣的朋友可以了解一下,也希望你看后有所帮助。 在前端开发中,有时候需要动态修改的网页元素的样式,这里将使用JS动态修改元素样式的方法做个小结。 网页结构: 按钮: …

    2025年3月8日
    200
  • 关于WebSocket的那些事儿

    众所周知传统的http协议是客户端(浏览器)发送请求,浏览器响应请求的方式,一条请求对应一条响应。若浏览器不主动请求则服务端无法想客户端主动推数据。传统的方式是使用AJAX轮询(这个方式有它的问题)来解决这一问题后面展开讲。 应用场景 列举…

    2025年3月8日
    200
  • Web学习之怎么使用纹理贴图

    为了使图形能获得接近于真实物体的材质效果,一般会使用贴图,贴图类型主要包括两种:漫反射贴图和镜面高光贴图。其中漫反射贴图可以同时实现漫反射光和环境光的效果。实际效果请看demo:纹理贴图 2D纹理 实现贴图就需要用到纹理,常用的纹理格式有:…

    2025年3月8日
    200

发表回复

登录后才能评论