Js文件异步加载
2021-02-09 17:20
标签:class get csdn java 过程 执行 runner 原因 win 浏览器中渲染引擎与 Js文件异步加载 标签:class get csdn java 过程 执行 runner 原因 win 原文地址:https://www.cnblogs.com/WindrunnerMax/p/13059300.htmlJs文件异步加载
Js
脚本引擎是互斥的,在浏览器开始渲染页面时,如果遇到标签,会停止渲染当前页面,也就是说在脚本加载与执行的过程中会阻塞页面的渲染,在网速较差的环境下可能会出现浏览器页面假死的情况,这也就是尽量将
文件放置于
后的原因,
Js
文件异步加载就是使浏览器加载外部Js
脚本文件时不阻塞渲染线程,这称为非阻塞模式加载,当然加载完成之后解析执行Js
脚本时必须与渲染引擎互斥,解析执行Js
脚本的时机取决于异步加载Js
的方式。defer
defer
是早期IE
支持的属性,目前主流浏览器都已经支持。
defer
只适用于外联脚本。defer
的脚本,则会按顺序下载和执行。defer
脚本会在onDOMContentLoaded
和onload
事件之前执行。
async
HTML5
为元素定义了
async
属性,目前主流浏览器都已经支持。
async
只适用于外联脚本。async
的脚本,其下载和执行也是异步的,不能确保彼此的先后顺序。async
会在onload
事件之前执行,但并不能确保与DOMContentLoaded
的执行先后顺序。
Script DOM Element
Script DOM Element
的方式即动态插入一个标签来加载外部
Js
脚本文件,将其作为onload
事件的回调函数,即在页面加载完成后再执行,这样就不会阻塞渲染线程。window.onload = function(){
var script= document.createElement(‘script‘);
script.type = ‘text/javascript‘;
script.src ="https://cdn.jsdelivr.net/npm/jquery@3/dist/jquery.min.js";
var body= document.getElementsByTagName(‘body‘)[0];
body.appendChild(script);
}
每日一题
https://github.com/WindrunnerMax/EveryDay
参考
https://segmentfault.com/a/1190000006778717
https://www.cnblogs.com/jiasm/p/7683930.html
https://blog.csdn.net/qq_41245969/article/details/82428464
上一篇:jQuery Mobile 事件