1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > JavaScript中文件同步与异步加载办法介绍

JavaScript中文件同步与异步加载办法介绍

时间:2020-11-26 23:10:14

相关推荐

JavaScript中文件同步与异步加载办法介绍

web前端|js教程

JavaScript,js,加载

web前端-js教程

对于JS文件的引用,尽管当前有不少框架和工具(比如webpack,commonjs,requiresjs等)都做了很好的处理。但是抛开这些框架,了解原生的加载方式还是不无裨益。本文简述一些js文件的同步和异步加载方式。

股票平台源码 完整版,vm安装ubuntu显示,tomcat下载文件方式,css 防爬虫,php检测输入的内容,seo gjzlzw

同步加载

龙兵名片源码,ubuntu全局www跳转,易语言爬虫采集,php 版本 选用,seo技术通讯lzw

可在html文件里以标签插入,这是初学时最基本的方式。

织梦医院挂号带支付系统源码,ubuntu怎么添加壁纸,怎么起两个tomcat实例,python爬虫框架速度,北京威动科技有限公司php,大源网站seolzw

准备两个js文件如下:

calc1.js

console.log(calc1 loading begin)function add(...args) { return args.reduce((currentTotal, i) => currentTotal + i, 0);}console.log(calc1 loading end)

calc2.js

console.log(calc2 loading begin)console.log(add(1,2,3))console.log(calc2 loading end)

calc2.js 是依赖calc1.js的。

html文件如下:

这种方式下,文件加载是同步的。即calc1.js加载完成后,才加载calc2.js,所以保证了calc2.js总能正确地调用calc1里的add函数。在Chrome里的调试结果如下:

但同步加载的缺点也明显,如果有多个文件的时候,全部加载时间会很长,而且阻塞用户界面响应。

通过Script Element异步加载

异步加载的优点是,能够同时加载多个js文件,而且由于是异步,不会阻塞用户界面,用户体验好。当然缺点是,不能保证有依赖关系的文件的加载顺序。

html 代码

Titlevar script1 = document.createElement(script); script1.src=calc1.js; script1.type= ext/javascript; var script2 = document.createElement(script); script2.src=calc2.js; script2.type= ext/javascript; document.getElementsByTagName(head)[0].appendChild(script1).appendChild(script2);

在Chrome里的调试结果有时候能正确的输出如下:

但有时候由于clac1.js没有被先加载,calc2.js执行时会报错。

那么我们就得需要解决加载顺序问题,保证calc1.js先加载。

Titlefunction loadScript(file, callbackFn) {var script = document.createElement(script);script.src= file;script.type= ext/javascript;// 监听onload时间,当前js文件加载完成后,再加载下一个script.onload = callbackFn;document.getElementsByTagName(head)[0].appendChild(script) } loadScript(calc1.js, function () {loadScript(calc2.js); } );

这样就能永远输出正确结果了。

通过 AJAX 加载JS文件

function loadScript(file, callbackFn) {var xhr = new XMLHttpRequest();xhr.open(get, file, true);// for IEif (xhr.onreadystatechange) { xhr.onreadystatechange = function () {console.log(xhr.readyState, xhr.status);if (xhr.readyState == 4) { if (xhr.status >= 200 && xhr.status < 300 || xhr.status == 304) { insertScriptText(xhr.responseText); if (callbackFn) {callbackFn(); } }} }} else { xhr.onload = function () {insertScriptText(xhr.responseText);if (callbackFn) { callbackFn();} }}xhr.send(null); } function insertScriptText(scriptText) {var script = document.createElement(script);script.type = ext/javascript;script.text = scriptText;document.body.appendChild(script); } loadScript(calc1.js, function () {loadScript(calc2.js); });

也能正确的输出结果。

总结

如果是单一或少数js文件,可以在html body的最后插入script标签,以同步方式加载。Webpack其实也是把多个js文件合并称一个,然后在body插入script引用。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。