0

I was going through this backbone tutorial. Here both shim and amd version of underscore and backbone has been used to load the script file.

The reason behind has been given that shim doens't load script file asynchronously but the amd version allow to load the jquery,underscore, and backbone asynchronously.

I too see in firebug that it was true. So my question is: which approach is actually good for real/production application.

4

1 回答 1

1

使用require.js。它在管理大型 JavaScript 应用程序中的依赖项方面非常强大。

AMD

异步模块定义 ( AMD ) API 指定了一种用于定义模块的机制,以便可以异步加载模块及其依赖项。这特别适用于同步加载模块会导致性能、可用​​性、调试和跨域访问问题的浏览器环境。

定义.amd 属性

为了清楚地表明全局定义函数(脚本 src 浏览器加载所需)符合 AMD API,任何全局定义函数都应该有一个名为“amd”的属性,其值为一个对象。这有助于避免与任何其他可能定义了不符合 AMD API 的 define() 函数的现有 JavaScript 代码发生冲突。

此时未指定 define.amd 对象内的属性。它可以由想要通知实现支持的基本 API 之外的其他功能的实现者使用。

具有对象值的 define.amd 属性的存在表明符合此 API。如果有另一个版本的 API,它可能会定义另一个属性,如 define.amd2,以指示符合该 API 版本的实现。

如何为允许在环境中加载多个版本的模块的实现定义它的示例:

 define.amd = {
    multiversion: true
  };

最低定义:

 define.amd = {};

管理依赖文件的顺序

RequireJS 使用异步模块加载 (AMD)来加载文件。每个依赖模块将按照给定的顺序通过异步请求开始加载。即使考虑了文件顺序,由于异步性质,我们不能保证第一个文件在第二个文件之前加载。因此,RequireJS 允许我们使用 shim 配置来定义需要以正确顺序加载的文件序列。让我们看看如何在 RequireJS 中创建配置选项。

requirejs.config({
  shim: {
    'source1': ['dependency1','dependency2'],
    'source2': ['source1']
  }
});

RequireJS 允许我们使用 config() 函数提供配置选项。它接受一个名为 shim 的参数,我们可以使用它来定义强制的依赖序列。您可以在RequireJS API 文档中找到完整的配置指南。

参考 1) http://www.sitepoint.com/understanding-requirejs-for-effective-javascript-module-loading/

2) https://github.com/amdjs/amdjs-api/wiki/AMD

于 2013-10-16T07:09:50.720 回答