何时使用Requirejs以及何时使用捆绑的javascript?

kun*_*jee 74 javascript requirejs servicestack

对于网络人来说,这可能是一个愚蠢的问题.但我对此感到有些困惑.现在,我有一个应用程序,我使用几个Javascript文件来执行不同的任务.现在,我正在使用Javascript 捆绑器来组合和缩小所有文件.因此,在运行时只有一个app.min.js文件.现在,Requirejs用于在运行时加载模块或文件.所以,问题是如果我已将所有内容都放在一个文件中,那么我是否需要requirejs?或者什么是用例场景我可以使用requirejs和/或bundler?

如果需要进一步的细节,请告诉我.

Mat*_*eer 48

通常,您在开发期间仅在其加载形式中使用RequireJS.站点完成并准备部署后,您将缩小代码.这里的优点是RequireJS确切地知道你的依赖是什么,因此可以很容易地以正确的顺序缩小代码.以下是RequireJS网站上的内容:

完成开发并希望为最终用户部署代码后,可以使用优化器将JavaScript文件组合在一起并缩小它.在上面的示例中,它可以将main.js和helper/util.js组合到一个文件中并缩小结果.

  • 是的,从某种意义上说.但AMD更具理论性,因为requirejs也关注现实世界的性能问题.单独加载每个模块肯定更干净,更纯净,但将永远:) (5认同)
  • 我知道这是一个老线程,但我偶然发现因为我有类似的疑虑.所以,一个后续问题,如果你不介意 - 如果我们最终将所有内容捆绑到一个文件中进行部署,那么我的整个应用程序一次性加载而不是零碎(按需).这与AMD不矛盾吗? (4认同)

Bis*_*opZ 28

这是许多熟练的JavaScript开发人员中一个备受争议的问题.许多其他语言都有一个"编译"阶段,整个程序捆绑在一起进行部署(JBoss的.WAR文件会浮现在脑海中).来自更传统背景的程序员通常喜欢这种方法.

Javascript近年来已经看到这样的增长,很难确定最佳实践,但那些欣赏Javascript更多功能性的人通常更喜欢模块加载方法(如require.js使用).

我编写的Frame.js与require.js非常相似,所以我偏向于模块加载器方法.

直接回答你的问题,是的,它是一个或另一个.

大多数认为将脚本打包到单个文件中的人认为它可以实现更多压缩,从而提高效率.我相信在大多数情况下,包装的效率优势可以忽略不计,因为:(1)模块加载时间分布在整个会话中,(2)单个模块可以压缩到几乎相同的百分比,(3)单个模块可以缓存单独的服务器和路由器,以及(4)仅在需要时加载脚本最终允许您为一些用户加载更少的代码和更多的代码.

从长远来看,如果您能看到动态脚本加载的优势,请使用它.如果没有,请将脚本捆绑到一个文件中.

  • 虽然我理解单独保存文件的好处,但我认为捆绑还减少了所需的http连接数.随着浏览器和服务器中的流水线技术变得越来越广泛,这可能会更少,但它目前是一个非常重要的事情. (6认同)
  • 如果应用程序很大,http连接开销可以快速安装.对于我们的应用程序,当我们以解压缩模式运行并单独加载每个JS文件时,加载页面大约需要15-30秒.在打包模式下大约一秒钟. (5认同)

Har*_*rry 11

这取决于您的应用程序.如果你正在制作一个只有适度的javascript(小于100kb缩小)的服务器端应用程序然后去完全捆绑,你可能会没事的.

但是如果你正在制作一个javascript应用程序并且其中包含大量代码,那么你的需求将会有所不同.

例如,在我的应用程序中,我捆绑了所有核心文件.有jQuery,下划线,主干,我的主要应用程序文件,我的用户登录系统,我的布局系统,我的通知和聊天系统,都是我的大型初始文件的一部分.

但是我还有许多其他模块,它们不是初始包的一部分,在那之后加载.

论坛,wiki,wysiwyg,颜色选择器,拖放,日历和一些动画文件是第二类的一部分.您需要立即做出合理的决定,以确定哪些是常用的,哪些是可以延迟的.

如果我立即包含所有内容,我可以获得超过一个巨大的javascript,这将是疯狂的,并使初始启动速度慢得令人无法接受.

第二类initSuccess从初始文件触发事件后开始下载.

但是第二类比第一类更智能,因为它首先加载了更重要的东西.例如,如果您正在查看维基,它将在加载颜色选择器之前加载维基.