遇到的问题
来看示例:
// math.js
Math = {};
Math.add = function(n, m) { return n + m; };
// increment.js
function increment(val) { return Math.add(val, 1); }
// program.js
alert(increment(1));
假设 math.js 是数学静态方法库,increment.js 是具体业务代码,program.js 是执行入口。在 html 页面,最直接的引入方式:
<script src="math.js"></script>
<script src="increment.js"></script>
<script src="program.js"></script>
在真实场景下,上面的方式有以下问题:
- js 文件的下载是串行和阻塞的。
- 全局空间污染,暴露了 Math, increment 全局变量。在真实场景下,有可能会更多。
- js 文件的引入顺序不能调换,开发者必须知道文件之间的依赖关系。
- HTTP 链接数过多。
针对上面的问题,典型的解决方法有:
- 用 script injection 的方式并行异步下载文件,比如 LabJS, HeadJS, ControlJS 等 script loaders.