JavaScript文件的同步和异步加载的实现代码
对于射流研究…文件的引用,尽管当前有不少框架和工具(比如webpack,commonjs,requiresjs等)都做了很好的处理。但是抛开这些框架,了解原生的加载方式还是不无裨益。本文简述一些射流研究…文件的同步和异步加载方式。
同步加载
可在超文本标记语言文件里以脚本标签插入,这是初学时最基本的方式。
准备两个射流研究…文件如下:
calc1.js
console.log('calc1加载开始)函数添加(.args){返回args。reduce((当前总计,i)=currentTotal i,0);}console.log('calc1加载结束)calc2.js
console.log('calc2加载开始)console.log(add(1,2,3))console.log('calc2加载结束)calc2.js是依赖calc1.js的。
超文本标记语言文件如下:
正文脚本C1。js /脚本脚本C2。js /脚本/正文这种方式下,文件加载是同步的。即calc1.js加载完成后,才加载calc2.js,所以保证了calc2.js总能正确地调用calc1里的增加函数。在铬里的调试结果如下:
但同步加载的缺点也明显,如果有多个文件的时候,全部加载时间会很长,而且阻塞用户界面响应。
通过脚本元素异步加载
异步加载的优点是,能够同时加载多个射流研究…文件,而且由于是异步,不会阻塞用户界面,用户体验好。当然缺点是,不能保证有依赖关系的文件的加载顺序。
超文本标记语言代码
head meta charset=' UTF-8 ' title title/title script type=' text/JavaScript ' var script 1=document。create element(' script ');剧本一。叫做C1。js ';剧本一。type=' text/JavaScript ';var脚本2=文档。创建元素(“脚本”);剧本二。叫做C2。js ';剧本二。type=' text/JavaScript ';文件。getelementsbytagname(' head ')[0].附录1 .appendChild(脚本2);/脚本/标题在铬里的调试结果有时候能正确的输出如下:
但有时候由于clac1.js没有被先加载,calc2.js执行时会报错。
那么我们就得需要解决加载顺序问题,保证calc1.js先加载。
head meta charset=' UTF-8 '标题标题/标题脚本类型='text/javascript '函数loadScript(file,callbackFn){ var script=document。create element(' script ');script.src=filescript。type=' text/JavaScript ';//监听装载时间,当前射流研究…文件加载完成后,再加载下一个script . onload=callbackFndocument。getelementsbytagname(' head ')[0].appendChild(script)} LoAdscript(' cal C1。js’),function(){ LoAdscript(' cal C2。js’);} );/脚本/标题这样就能永远输出正确结果了。
通过创建交互式、快速动态网页应用的网页开发技术加载射流研究…文件
脚本函数loadScript(file,callbackFn){ var xhr=new XMLHttpRequest();xhr.open('get ',file,true);//对于IE if(xhr。onreadystatechange){ xhr。onreadystatechange=function(){ console。日志(xhr。readystate,xhr。地位);if(xhr。readystate==4){ if(xhr。状态=200 xhr。状态300 | | xhr。status==304){ insert script text(xhr。response text);if(callbackFn){ callbackFn();} } } } } else { xhr。onload=function(){插入脚本文本(xhr。response text);if(callbackFn){ callbackFn();} } } xhr。发送(null);}函数插入脚本文本(script text){ var script=document。创建元素(“脚本”);剧本。type=' text/JavaScript ';script . text=scripttextdocument . body . appendchild(脚本);} loadScript('calc1.js ',function(){ Loadscript(' cal C2。js’);});/script也能正确的输出结果。
总结
如果是单一或少数射流研究…文件,可以在超文本标记语言正文的最后插入脚本标签,以同步方式加载网络包其实也是把多个射流研究…文件合并称一个,然后在身体插入脚本引用。
如果有多个js文件,建议异步加载,避免阻塞界面呈现,缩短整体加载时间。本文介绍了脚本元素和Ajax,并给出了带有依赖关系的文件加载序列的实例。请参考https://github。com/jackiege/js-learn/tree/master/ch1-异步加载
以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。
版权声明:JavaScript文件的同步和异步加载的实现代码是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。