代码之家  ›  专栏  ›  技术社区  ›  M.K. Safi

UglifyJS可以替代RequireJS吗?

  •  2
  • M.K. Safi  · 技术社区  · 12 年前

    老实说,我不理解RequireJS的好处。如果我使用UglifyJS缩小并连接所有文件,并在关闭之前放置单个生成的JS文件 </body> 标签,我还需要使用RequireJS吗?除了在我的页面大小上增加15KB之外,RequireJS还提供了什么UglifyJS无法提供的好处?

    4 回复  |  直到 12 年前
        1
  •  3
  •   Andreas Köberle    12 年前

    使用requireJs的要点是要有一种合理的方式来模块化代码。假设你有一个有几千行代码的应用程序,你不想在一个文件中处理这些。因此,如果您开始将其拆分为不同的文件,则需要一种方法以正确的顺序加载所有单个文件。当然,你可以自己创建20个脚本标记,并确保它们的顺序正确,但随着代码的增长,你必须添加更多的脚本标记,对于每个文件,你必须找到正确的位置。这就是requireJs的作用所在。

    假设你有一个3脚本,a.js依赖于B.js,后者依赖于C.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'
    })
    

    具有所需的Js

    <script src="require.js" data-main="A.js"></script>
    

    在每个脚本中,您都声明了dependencies:

    //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'
    })
    

    这是一个非常简单的例子,但关键是您不必关心模块的顺序,因为requireJ会按照正确的顺序加载。

    回到您的问题,优化器更像是一个附加组件,所以如果您有一个小的代码库,可以放在一个文件中并且仍然可以维护,那么只需使用uglifyJs。但是,如果您想将代码拆分为模块,那么需要Js。

        2
  •  1
  •   Christophe    12 年前

    UglifyJS和RequireJS有着截然不同的目的,两者都可以应用于您的情况。

    RequireJS和异步模块定义背后的想法是将代码分成更小的块,使其更易于管理。就性能而言,它有两个主要优点:

    • 更快的加载,因为您可以并行加载多个块
    • 占用空间更小,因为您只加载当前上下文中真正需要的代码部分

    一个很好的例子是图表库。浏览器使用不同的标准来渲染图形:svg、vml、canvas等。图表库将为这些标准中的每一个提供代码,但在运行时,它将只加载与特定设备和浏览器相关的部分。

        3
  •  0
  •   tckmn    12 年前

    好吧,如果你在网站上的每个页面都使用一个文件,那就是 可怕的 用于代码重用。

    您不想将相同的代码复制/粘贴到 每个 页文件也不会被缓存,这会大大增加页面加载时间。

    另请参阅: RequireJS's "why" page

        4
  •  0
  •   itmitica    12 年前

    使用requirej,您可以在JS中拥有与其他编程语言相同的开发过程。

    您可以编写模块,只需引用它们的包含文件,这些模块就可以很容易地用于其他项目。

    最终,当为网络写作时, requirejs has an optimizer 这将使模块变得丑陋,并将其组合在一个脚本中。