【发布时间】:2017-08-19 22:36:23
【问题描述】:
我在 MVC 项目中编写了许多脚本和 css。
我正在使用捆绑和缩小,我知道我可以像这样将它们捆绑在一起:
bundles.Add(new StyleBundle("~/Content/site/").Include("~/Content/site/*.css"));
bundles.Add(new ScriptBundle("~/bundles/site").Include("~/Scripts/site/*.js"));
问题是我不想Render所有的脚本和css在一起,我每个View都需要一两个,我知道我可以手动注册每个脚本/css然后就可以了render它们分别在每个视图中:
bundles.Add(new ScriptBundle("~/bundles/script1").Include("~/Scripts/site/script1.js"));
bundles.Add(new ScriptBundle("~/bundles/script2").Include("~/Scripts/site/script2.js"));
然后在一个视图中:
@section scripts{
@Scripts.Render("~/bundles/script1")
}
在第二个中:
@section scripts{
@Scripts.Render("~/bundles/script2")
}
我的问题是这是正确的还是有更好的解决方案。
【问题讨论】:
-
捆绑器的特点是,它捆绑了你所有的脚本。下载多个小文件的开销比较大。关键部分在于脚本通常缓存在客户端。因此,我会将多个文件放在一个包中。您基本上不需要触摸默认实现。
-
@Stefan 谢谢,如果在性能方面最好将它们全部放在一起我不明白如何在每个视图中分别拉出它们?
-
一般以后不需要分开。如果脚本可以彼此相邻存在(因此脚本中没有同名的全局定义变量),您可以遵循@Georg 的回答。创建一个包并在每个页面上呈现整个包。您将拥有所有可用的 js 文件和 css 文件。
-
嗯,有两个方面:下载时间和执行时间。由于缩小、捆绑和缓存(缓存由客户端执行),捆绑将优化下载时间。更少的文件,更少的连接,简化的缓存 => 更高的下载速度。执行时间通常比下载时间快得多,因此(取决于设备的 cpu 和内存)这个损失相对较小。此优化仅适用于下载部分。多个脚本文件的问题是需要根据缓存机制检查更多文件,这会减慢页面渲染速度。
-
所以如果你不想这样做;没问题。但是,如果您因为性能损失而不想这样做,那是一种优化,我怀疑无法通过其他方式实现。
标签: c# asp.net-mvc bundling-and-minification