servicestack,Javascript,Requirejs,servicestack" /> servicestack,Javascript,Requirejs,servicestack" />

何时使用Requirejs,何时使用捆绑javascript?

何时使用Requirejs,何时使用捆绑javascript?,javascript,requirejs,servicestack,Javascript,Requirejs,servicestack,对于网络人来说,这可能是一个愚蠢的问题。但我对此有点困惑。现在,我有了一个应用程序,其中我使用了几个Javascript文件来执行不同的任务。现在,我正在使用Javascript合并并缩小所有文件。因此,在运行时只有一个app.min.js文件。现在,用于在运行时加载模块或文件。所以,问题是如果我已经在一个文件中有了所有的东西,那么我需要requirejs吗?或者我可以使用requirejs和/或bundler的用例场景是什么 如果需要进一步的详细信息,请告诉我。通常,在开发过程中,您只在加载表

对于网络人来说,这可能是一个愚蠢的问题。但我对此有点困惑。现在,我有了一个应用程序,其中我使用了几个Javascript文件来执行不同的任务。现在,我正在使用Javascript合并并缩小所有文件。因此,在运行时只有一个app.min.js文件。现在,用于在运行时加载模块或文件。所以,问题是如果我已经在一个文件中有了所有的东西,那么我需要requirejs吗?或者我可以使用requirejs和/或bundler的用例场景是什么


如果需要进一步的详细信息,请告诉我。

通常,在开发过程中,您只在加载表单中使用RequireJS。一旦站点完成并准备好部署,就可以缩小代码。这里的优点是RequireJS确切地知道您的依赖项是什么,因此可以轻松地按照正确的顺序缩小代码。下面是它在网页上的内容:

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


这是许多精通javascript的开发人员之间激烈争论的问题。许多其他语言都有一个“编译”阶段,将整个程序捆绑起来进行部署(想到JBoss的.WAR文件)。来自更传统背景的程序员通常喜欢这种方法

Javascript近年来发展迅速,很难制定出准确的最佳实践,但那些欣赏Javascript更具功能性的人通常更喜欢模块加载方法(如require.js)

我编写了一个与require.js非常相似的程序,所以我倾向于使用模块加载器方法

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

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


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

这取决于您的应用程序。如果你正在制作一个服务器端应用程序,只使用普通的javascript(小于100kb的缩小版),那么就进行完全捆绑,你可能会没事的

但是如果你正在制作一个javascript应用程序,并且里面有大量的代码,那么你的需求就会有所不同

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

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

论坛、wiki、所见即所得、颜色选择器、拖放、日历和一些动画文件属于第二类。你需要做出合理的决定,决定什么是常用的,什么是立即需要的,什么是可以延迟的

如果我立即包含所有内容,我就可以获得超过一兆javascript的速度,这将是疯狂的,并使初始引导速度慢得令人无法接受

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


但是第二类比第一类更聪明,因为它装载了第一类更重要的东西。例如,如果您正在查看wiki,它将在加载颜色选择器之前加载wiki。

我不明白为什么您需要两者。你认为你会吗?这是一种困惑。什么时候用什么?或者只需要选择一个?除了延迟加载javascripts之外,不需要特性依赖注入就可以消除对全局的需求吗?在我看来,Require在捆绑文件中仍然很有用。我错了吗?虽然我理解分开保存文件的好处,但我认为捆绑也减少了所需的http连接数量。随着浏览器和服务器中的管道变得越来越广泛,这可能不那么重要,但目前这是一个相当大的问题。如果应用程序很大,http连接开销可能会迅速增加。对于我们的应用程序,当我们以解包模式运行它并单独加载每个JS文件时,加载页面大约需要15-30秒。在打包模式下,这大约需要一秒钟。一个打包的缓存文件显然比获取几十个或数百个文件要快得多,你永远无法确定这些文件是否已加载,或者加载它们需要多长时间。因此,最好将所有内容转储到客户端。在大多数情况下,这个文件的大小不会超过1mb,在缩小和压缩后可能会小得多。所以,单文件FTW。数千个强类型类,和一个.swf文件FTW。我知道这是一个旧线程,但我偶然发现了,因为我有类似的疑问。所以,如果您不介意的话,还有一个问题——如果我们最终将所有内容捆绑到一个文件中进行部署,那么我的整个应用程序将一次性加载,而不是零碎地(按需)加载。这与AMD不矛盾吗?是的,在某种意义上是这样的。但AMD更具理论性,as requirejs也关注现实世界的性能问题。单独加载每个模块肯定会更干净、更纯粹,但会花费很长时间:)我也提出了这个问题,所以请看。也许是这两种方法之间的中间点?