asp.net mvc 3 - 针对不同视图的专门捆绑和缩小

时间:2013-01-21 18:21:43

标签: javascript asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 bundle

摘要

捆绑和缩小JavaScript时,拥有单个站点范围的JS捆绑包或多个特定捆绑包是​​不错的做法?

如果是后者,那么如何将这些bundle添加到每个View(而不是layout)中,并且仍然让服务器在调试模式下返回各个非缩小的JS文件?

详细信息

我读了一篇非常有趣的文章,详细介绍了如何在ASP.NET MVC3 Web应用程序中使用MVC4框架中提供的捆绑和缩小:click for article

在本文中,它介绍了如何从布局页面添加指向特定包的链接:

Scripts.Render("~/bundles/MyBundle")

我可以看到这种方法对于创建网站范围的捆绑包非常有用。

但是,我不确定最佳做法是关于是否有一个网站范围的捆绑,或多个专业捆绑,我很感激这里的建议。正如我所看到的,单个站点范围的捆绑包的优缺点是:

  • 缺点:
    • 减慢主页的初始加载速度(即使最小化)
    • 可能更难确保没有JS冲突。
  • 优点:
    • 所有后续页面都没有新的下载内容
    • 只需一个管理

好的 - 假设最佳实践证明是多个捆绑包......就是这样,我看到将一个捆绑包添加到布局页面是多么容易,但具体的视图怎么样?每个View应该注册它所需的JS(在脚本部分中),然后将其添加到页面主体的底部,以便最后加载(与您添加到Header的CSS不同,以便首先加载)。我使用以下代码管理了这个,但是这条路线的问题是JS 总是作为单个缩小文件出现,这在调试模式下没有用。

@<script src="@Scripts.Url("~/bundles/myBundle")"></script>

非常感谢提前

格里夫

1 个答案:

答案 0 :(得分:2)

你可以做到这两点。为了呈现专用包,您可以这样做:

在_Layout.cshtml中创建一个脚本部分。我通常把它放在关闭身体标签之前的页面底部,但你也可以将它放在头部:

@RenderSection("scripts", required: false)

然后,在您的视图中,您可以像这样定义部分:

@section scripts {

    @Scripts.Render("~/bundles/myspecialuniquebundlejustforthisview")

}

当您这样做时,只有在使用debug =“false”进行编译或在调试时显式设置BundleTable.EnableOptimizations = true时,才会压缩和缩小包。