1.defer 异步加载,要等到dom文档全部解析完成之后才会执行
2.async 异步加载,只要js文件加载完就执行,只能加载外部链接的js文件
3.按需加载
<!-- 按需加载 -->
<script type="text/javascript">
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中的函数
})
浏览器线程
1.js引擎线程
js内核,js引擎,负责处理执行JavaScript脚本,也是js主线程, js是单线处理代码,js负责调配其他子线程来处理一部代码
2.GUI渲染线程
负责渲染浏览器界面,包括解析HTML.css构建dom树,render树,(js引擎与GUI线程是互斥的)
3.事件监听线程
用来处理事件的监听
4.计时器线程
负责处理定时器
5.网络线程
处理http请求
本文探讨了JavaScript中异步加载的三种方案:defer、async和按需加载。defer会在DOM解析完成后执行,async则在文件加载完毕后立即执行,无论DOM状态。同时,文章还介绍了浏览器的工作线程,包括JS引擎线程、GUI渲染线程、事件监听线程、计时器线程和网络线程。
4054

被折叠的 条评论
为什么被折叠?



