【问题标题】:what are the advantages of using an AMD like requirejs or commonjs modules in javascript?在 JavaScript 中使用像 requirejs 或 commonjs 模块这样的 AMD 有什么好处?
【发布时间】:2012-08-14 21:55:51
【问题描述】:

我已经阅读了很多关于 AMD 解决方案的文章,例如 RequireJS 或在 Javascript 中遵循 CommonJS 样式的模块加载器。

假设我有一个应用程序拆分成这几个部分:

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

我可以将每个部分编写为 RequireJS 模块或通用 JS 模块并将我的项目拆分为我想要的多少个文件,但是将每个部分编写为一个模块或将它们拆分为多个文件然后将它们加载到正确的顺序(以避免依赖问题)可能将所有文件连接到一个大文件中以减少 HTTP 请求(如 r.js 优化器所做的那样)?

【问题讨论】:

    标签: javascript requirejs commonjs


    【解决方案1】:

    在我看来,有三个比较重要的原因:

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

    您可以将代码结构放入单独的文件夹和文件中,并且 requirejs 会在需要时异步加载它们,因此一切正常。

    您可以为生产而构建。 RequireJS 带有自己的构建工具,称为 R.JS,它将您的 javascript 模块连接和 uglify 到单个(或多个)包中。这将提高您的页面速度,因为用户将不得不进行更少的脚本调用并加载更少的内容(因为您的 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

    【讨论】:

    • 谢谢,因为我是唯一的开发人员,而且覆盖函数的风险几乎是不可能的(而且我不明白 requirejs 如何避免冲突)我唯一需要的是一种方法将我的项目拆分为多个文件,我可以通过简单地将它们连接到一个文件中来保持正确的顺序来做到这一点。 requirejs 或类似的东西在这种情况下有用吗?
    • 看过你的项目,把项目拆分成多个文件然后只加载一个以正确的顺序连接所有其他文件并使用requirejs有什么区别?
    • 能否重新表述你的问题,我不明白。
    • 我想我还不是很清楚。我知道性能、请求和拆分文件,但是拆分多个文件然后在生产中连接它们而不使用 requirejs 或其他模块以及使用 requirejs 之类的模块加载器(除了依赖项管理)之间有什么区别,但在我的情况下足以加载我的应用程序的每个部分都按正确的顺序排列
    • 在我看来,您正在尝试重新发明轮子。如果您正在编写一个小型应用程序,那么您可以自己连接文件(手动或通过小脚本)。它会起作用,但是随着您的应用程序的增长,您将无法再管理它。我已经走上了这条路,维护代码太可怕了。
    猜你喜欢
    • 1970-01-01
    • 2019-12-20
    • 2016-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-24
    相关资源
    最近更新 更多