【问题标题】:Require.js optimization vs asp.net mvc 4 bundling and minificationRequire.js 优化与 asp.net mvc 4 捆绑和缩小
【发布时间】:2012-10-02 22:46:07
【问题描述】:

最近我看到 Mvc 4 已经将多个脚本和 css 捆绑和缩小到一个链接中,从而通过单个配置来缩小和减少脚本加载时间。

require.js r.js 也是一个可用于脚本加载和缩小的优化工具。谁能告诉我哪个更好?或者是否可以使用 require.js 与缩小 + 捆绑工具一样将脚本加载到单个文件中?和 Mvc 4 一样吗?

我更喜欢使用 require.js 进行 AMD 加载,因此考虑应用 Mvc 4 缩小理念的概念,如果它在 require.js 中可用作为脚本的单个 url 加载和用于优化和缩小的 css。

有人可以对这个话题提出一些想法和启示吗?

【问题讨论】:

  • 有人能解释一下这个事实吗?

标签: asp.net-mvc-4 requirejs bundling-and-minification


【解决方案1】:

Require.js 是一个客户端工具,它允许客户端只请求它需要的脚本。通常在 MVC 应用程序中,每个脚本最终都会添加到 _layout.cshtml 文件中,并且没有太多考虑每个控制器需要什么。 Require.js 允许您考虑每个模块需要什么才能运行。

r.js 需要 node 或 java,并且是一种类似于 MVC4 捆绑和缩小的服务器端工具。 r.js 与 require 一起工作,以尝试缩小常用的捆绑包并将它们作为包发送。但是通过捆绑和打包它们,您可能会在脚本“需要”它们之前将它们发送出去。

有趣的是,捆绑您几乎违背了 AMD 的目的。即 - 您将一大堆依赖脚本捆绑到一个文件中,而不是让 require.js 整理出它需要哪些脚本,并在需要时发出请求。

关于集成 require 和 mvc 的一个很好的参考:http://www.stefanprodan.eu/2012/09/intro-requirejs-for-asp-net-mvc/ - 请注意它不使用捆绑。

所以对我来说 - 我认为缩小单个文件(并捆绑/缩小 css)并根据需要让它工作以支持 AMD。

【讨论】:

  • 但是即使我通过 r.js 缩小(不是捆绑)并让 require.js 完成它的工作(比如在需要时加载脚本)。如果我打开萤火虫。我仍然看到脚本在页面加载时通过 main.js 加载(由data-main 属性调用的主脚本文件。因此,它以某种方式缓存了 js 文件,没关系。但它完全加载了所有脚本一次一个(实际上至少是我在 firebug 中看到的)。然后它只在需要的时候请求脚本。所以如果我考虑加载内容和网络带宽,这实际上是不是不太有目的?跨度>
  • 这很奇怪 - 我对 require 的理解是它只会在需要时请求它们,而不是下载全部量。也许在想要将它们完全放在一起和需要一次想要它们以使其两者兼得之间存在冲突?
  • 注意点。我会调查它......但是,直到找到正确的解决方案和洞察力,我不会将其标记为答案:) 请不要被冒犯:) 我也希望你探索我上面所说的事实:)跨度>
  • 你确定有 optimize=none 吗?如果你没有,r 将在第一次调用时提供整个文件。然后 - require 将根据需要单独发送每个文件......这对你来说似乎是这种情况......
【解决方案2】:

在我的特殊情况下(以及我之前遇到的许多其他情况),仅仅为了加载 1-3kb 脚本或样式文件而使用单独的请求执行额外的服务器加载没有多大意义。

  • 如前所述,此类请求使用通常有限的服务器资源
  • 加载需要时间,50-200ms 保证延迟
  • 您拥有的文件越多,其中一个文件由于连接问题而无法加载的可能性就越大
  • 将所有内容包装到模块中还需要大量样板代码的开销

一次加载甚至是巨大的 5mb(这是不真实的)捆绑脚本并稍后从缓存中加载它看起来更加高效和安全。通过使用 GZip,您可以将 5 mb 的文本压缩成 200 kb 的二进制数据,这比平均网站每次请求使用的图形内容量要少得多。

【讨论】:

  • 所以在某种程度上,您是说使用 asp.net mvc 捆绑的捆绑 js 的压缩和缩小版本比使用 requirejs 为 ajax 请求执行服务器加载效率要高得多?
  • 是的,每个站点使用一个脚本文件并在用户第一次访问您的站点时加载它似乎更合乎逻辑,稍后将使用缓存版本
  • 你的观点是有效的。但是对于那些使用面向 javascript 的结构的人来说,有点像 SPA 的模块定义。这不是requirejs更闪耀吗?像您可以将所有内容管理到文件夹结构中并且可管理性更好吗? .显然我知道我偏离了话题,但只是好奇
  • 就我而言,我已经将所有内容都管理到文件夹结构中。 Before my application starts it goes through my scripts folder and selects all filenames and their paths from it, when all filenames are selected I run the script that optimises all found scripts into one file.
猜你喜欢
  • 2013-02-21
  • 2013-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-12
  • 2014-04-16
  • 2014-11-26
  • 1970-01-01
相关资源
最近更新 更多