日期:2014-05-16  浏览次数:20423 次

打造最出色的模块加载框架:SeaJS Module Loader v0.3.0 预览版

?

转自?

http://www.uini.net/2011/01/load-modules-to-create-the-best-framework-seajs-module-loader-v0-3-0-preview.html

?

打造最出色的模块加载框架:SeaJS Module Loader v0.3.0 预览版

遇到的问题

来看示例:

// 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>

在真实场景下,上面的方式有以下问题:

  1. js 文件的下载是串行和阻塞的。
  2. 全局空间污染,暴露了 Math, increment 全局变量。在真实场景下,有可能会更多。
  3. js 文件的引入顺序不能调换,开发者必须知道文件之间的依赖关系。
  4. HTTP 链接数过多。

针对上面的问题,典型的解决方法有:

  1. 用 script injection 的方式并行异步下载文件,比如 LabJS, HeadJS, ControlJS 等 script loaders.