老实说,我不了解RequireJS的好处。如果我使用UglifyJS缩小和连接我的所有文件并将单个结果JS文件放在结束</body>
标记之前,我还需要使用RequireJS吗?除了在我的页面大小上添加15KB之外,RequireJS还提供了一些你无法使用UglifyJS的好处吗?
答案 0 :(得分:3)
使用requireJs的要点是有一种理智的方式来模块化你的代码。假设您有一个包含几千行代码的应用程序,您不希望在一个文件中处理这一切。因此,如果您开始将其拆分为不同的文件,则需要以正确的顺序加载所有单个文件。当然,您可以创建20个脚本标记,并确保它们按自己的顺序排列,但随着代码的增长,您必须添加更多脚本标记,并且每个文件都必须找到正确的位置。这就是requireJs的优点。
假设你有一个3脚本A.js取决于依赖于C.js的B.js
使用脚本标记,它看起来像这样:
<script src="C.js"></script>
<script src="B.js"></script>
<script src="A.js"></script>
//A.js
console.log('A' + B)
//B.js
B = 'B' + C
//C.js
C = 'C'
})
with requireJs
<script src="require.js" data-main="A.js"></script>
并在每个脚本中声明依赖:
//A.js
require(['B.js'], function (B) {
console.log('A' + B)
})
//B.js
define(['C.js'], function (C) {
return 'B' + C
})
//C.js
define([], function () {
return 'C'
})
这是一个非常简单的示例,但重点是您不必关心模块的顺序,因为requireJs以正确的顺序加载。
回到你的问题,优化器更像是一个补充,所以如果你有一个小代码库,它适合单个文件并且仍然可维护,那么只需使用uglifyJs。但是如果你想在模块中拆分代码,则需要使用requireJs。
答案 1 :(得分:1)
UglifyJS和RequireJS有非常不同的目的,两者都适用于您的情况。
一般来说,RequireJS和异步模块定义背后的想法是将代码分解成更小的块,以便更容易管理。在性能方面,它有两个主要好处:
一个很好的例子是图表库。浏览器使用不同的标准来渲染图形:svg,vml,canvas等。图表库将包含每个标准的代码,但在运行时它只会加载与特定设备和浏览器相关的部分。
答案 2 :(得分:0)
好吧,如果您为网站上的每个网页使用单个文件,那么代码重用就会糟糕。
您不希望将相同的代码复制/粘贴到每个页面上。这些文件也不会被缓存,这会大大增加页面加载时间。
答案 3 :(得分:0)
使用requirejs,您可以在JS中使用其他编程语言中的相同开发过程。
您可以编写模块,只需引用其包含的文件,就可以轻松地将这些模块重用于其他项目。
最终,在为网络撰写时,requirejs has an optimizer将在一个脚本中整理和组合模块。