同步加载
异步加载
异步加载方案
-
通过XMLHttpRequest 加载脚本
- 存在跨域问题
- 用臭名昭著的eval动态执行
- 或者在body里插入文件对应的script节点,这会干扰调试时控制台输出的错误行
-
通过WebWorkers加载脚本
- 浏览器兼容性较差
- 返回的字符串插入dom中的方法和XHR一样
-
通过document.write()加载脚本
- 页面加载完之后失效,意味着不能按需加载
- 由于清空文档流的机制,会阻塞页面的渲染
-
通过head.appendChild()加载脚本
如何解决异步加载导致有依赖的代码无法执行的问题?
CommonJs
var $ = require('jquery');
exports.myExample = function () {};
AMD
define(['jquery'] , function ($) {
return function () {};
});
- define的参数:模块的依赖和构造函数
- 当所有的依赖被加载好并执行时,这些依赖做为参数调用构造函数
- 允许直接返回函数
- 支持动态加载
- 对浏览器端的支持较好
RequireJS
- AMD
- 异步/同步加载
- 通过head.appendChild()加载脚本
参考资料
Why Web Modules?