传统上,加载javascript文件都是使用3f1c4e4b6b16bbbd69b2ee476dc4f83a标签。
就像下面这样:
e6c9f2d7a8d202c4ce4348f85f6483782cacc6d41bbb37262a98f745aa00fbf0
3f1c4e4b6b16bbbd69b2ee476dc4f83a标签很方便,只要加入网页,浏览器就会读取并运行。但是,它存在一些严重的缺陷。
(1)严格的读取顺序。由于浏览器按照3f1c4e4b6b16bbbd69b2ee476dc4f83a在网页中出现的顺序,读取javascript文件,然后立即运行,导致在多个文件互相依赖的情况下,依赖性最小的文件必须放在最前面,依赖性最大的文件必须放在最后面,否则代码会报错。
(2)性能问题。浏览器采用同步模式加载3f1c4e4b6b16bbbd69b2ee476dc4f83a标签,也就是说,页面会堵塞(blocking),等待javascript文件加载完成,然后再运行后面的html代码。当存在多个3f1c4e4b6b16bbbd69b2ee476dc4f83a标签时,浏览器无法同时读取,必须读取完一个再去读取另一个,造成读取时间大大延长,页面响应缓慢。
为了解决这些问题,可以使用dom方法,动态加载javascript文件。
function loadscript(url){
var script = document.createelement("script");
script.type = "text/javascript";
script.src = url;
document.body.appendchild(script);
}
这样做的原理是,浏览器即时创造出一个3f1c4e4b6b16bbbd69b2ee476dc4f83a标签,然后异步读取javascript文件。这样不会造成页面堵塞,但会造成另外一个问题:这样加载的javascript文件,不在原始的dom结构之中,因此在dom-ready(domcontentloaded)事件和window.onload事件中指定的回调函数对它无效。
更多js加载之使用dom方法动态加载javascript文件。