在javascript中使用AMD的requirejs或commonjs模块有什么好处?

what are the advantages of using an AMD like requirejs or commonjs modules in javascript?

我读过很多关于AMD解决方案的文章,比如在JavaScript中遵循CommonJS风格的RequireJS或模块加载程序。

假设我有一个应用程序分为以下几部分:

  • 依赖于我使用的框架的应用程序定义
  • 依赖应用程序定义和框架的模型1
  • 依赖应用程序定义的模型2、模型1和我的框架

我可以将每个部分作为一个RequireJS模块或一个公共JS模块来编写,并按照我想要的文件数来拆分我的项目,但是将每个部分作为一个模块来编写或将它们拆分成多个文件,然后以正确的顺序加载它们(为了避免依赖性问题),这有什么好处呢?可以将所有文件串联到一个大的模块中,以减少HTTP请求(同样如此)ne by r.js优化器)?


在我看来,有三个相当重要的原因:

您可以创建和重用模块,而不会污染全局命名空间。全局名称空间污染越严重,函数/变量冲突的可能性就越大。这意味着您定义了一个名为"foo"的函数,而另一个开发人员定义了函数"foo"=其中一个函数被覆盖。

您可以将代码结构成单独的文件夹和文件,Requirej会在需要时异步加载它们,所以一切都正常工作。

你可以为生产而建造。RequireJS自带一个名为R.JS的构建工具,可以将您的javascript模块合并到一个(或多个)包中。这将提高您的页面速度,因为用户将不得不进行更少的脚本调用和加载更少的内容(因为您的JS已被修改)。

您可以看看这个简单的演示项目:https://c9.io/peeter-tomberg/requirejs(在cloud9ide中)。

要将模块构建到单个应用程序中,只需安装RequireJS NPM包并运行命令:r.js-o build/build.properties.js

如果有任何问题,请提问。

编辑:

在开发中,将所有模块放在单独的文件中只是一种很好的代码结构和管理方法。它还可以帮助您进行调试(例如,在"module.js第17行"而不是"scripts.js第5373行"上出现错误)。

对于生产环境,您应该使用构建工具将JavaScript具体化并uglify为单个文件。这将帮助页面加载更快,因为您提出的请求更少。你的每一个加载请求都会减慢你的页面速度。你的页面越慢,谷歌给你的点数就越少。页面越慢,用户就越沮丧。你的页面越慢,你得到的销售额就越少。

如果您想了解更多关于网页性能的信息,请访问http://developer.yahoo.com/performance/rules.html