适用:页面使用大量的js做交互和ajax,然而又不像gmail,一次加载之后不会刷新页面,所以如果引入大量js就会拖慢页面的加载速度。这时如果只加载每个页面都需要初始化的js,其他js只有当需要时才动态加载进来,就会大大提高页面加载速度。
动态加载的方法:
//示例代码 dynamicLoad = function( file ) { each( file.funcs , function( i , func ) { //为可能用到的函数声明一个同名的代理函数 window[ func ] = function() { var ars = arguments; //当页面中调用到此函数时,会首先把自己注销 window[ func ] = null; //加载相应的js文件 loadFile( file.file , function() { //js加载完成之后,调用js中声明的同名函数,完成动态加载 window[ func ].apply( null , ars ); }); }; }); }; dynamicLoad({ file : 'http://xxx.com/xxx.js', funcs : [ 'chatWith' , 'showProfile' ] });
通过dynamicLoad方法注册了一个需要动态加载的函数,参数的file为需要动态加载的文件,funcs为js中实现的函数,当页面中触发调用此函数时,将动态加载对应文件。
需要解决的问题:
1 避免重复加载
这个问题很好解决,只需要做一个数组来存储已经加载的脚本,页面onload的时标记页面中已经加载的js,动态加载时判断某一脚本是否已加载,没有则加载此文件并标记为已加载。
2 在一个js中加载另一js时如何解决版本号问题
开发时写在页面里的脚本可能是xxx.js?ver=$$$,更新之后$$$会替换成对应的svn版本号,然而在js中动态加载另一文件时如何获知该js的版本号呢?
我想到的一种方法:
<script vsrc="xxx.js?ver=$$$"></script>
把页面中需要动态加载的js的src属性改成vsrc,这样就可以得到该文件的版本号
