30

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

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

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

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

4

2 回答 2

21

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。

于 2012-11-02T01:03:23.740 回答
9

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

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

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

于 2013-10-26T23:37:44.360 回答