总结
在 bundle 和缩小 JavaScript 时,使用单个站点范围的 JS bundle 还是多个特定的 bundle 是好的做法?
如果是后者,那么在 Debug模式下如何将这些包添加到每个 View (而不是布局)并仍然让服务器返回单个非缩小的 JS 文件?
详细说明
我读了一篇非常有趣的文章,详细介绍了如何在 ASP.NET MVC3 Web 应用程序中使用 MVC4 框架中可用的 bundle 和缩小:click for article
在这篇文章中,它描述了如何从布局页面添加指向特定包的链接:
Scripts.Render("~/bundles/MyBundle")
而且我可以看到这种方法对于创建站点范围的 bundle 有何好处。
但是,关于是拥有单个站点范围的 bundle 还是多个专门的 bundle ,我不确定最佳实践是什么,我希望得到您的建议。在我看来,单个站点范围的 bundle 的优缺点是:
- 缺点:
- 减慢主页的初始加载速度(即使最小化)
- 可能更难确保没有 JS 冲突。
- 优点:
- 所有后续页面都没有新内容可供下载
- 只需管理一个包
好的 - 假设最佳实践结果是多个 bundle ......既然如此,我看到将 bundle 添加到布局页面是多么容易,但是特定 View 呢?每个 View 都应该注册它需要的 JS(在脚本部分),然后将其添加到页面主体的底部,以便它最后加载(不像 CSS,您添加到 Header 以便它首先加载)。我使用以下代码对此进行了管理,但此路线的问题是 JS 总是 作为单个缩小文件出现,这在 Debug模式下没有多大帮助。
@<script src="@Scripts.Url("~/bundles/myBundle")"></script>
提前致谢
格里夫
最佳答案
两者都可以。为了呈现专门的包,您可以这样做:
在您的 _Layout.cshtml 中创建一个脚本部分。我通常将我的放在页面底部,就在结束 body 标记之前,但您也可以将它放在头部:
@RenderSection("scripts", required: false)
然后,在您的 View 中,您可以像这样定义该部分:
@section scripts {
@Scripts.Render("~/bundles/myspecialuniquebundlejustforthisview")
}
当您这样做时,只有当您使用 debug="false"进行编译或在调试期间显式设置 BundleTable.EnableOptimizations = true
时,包才会被压缩和缩小。
关于javascript - asp.net mvc 3 - 单独 View 的专门 bundle 和缩小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14444853/