ASP.net打包程序会自动压缩文件吗?

28

我正在使用ASP.net MVC 4。就像问题所述,如果我将一堆JS文件(或CSS文件)放入一个包中,它会自动被压缩吗?例如,我的捆绑应该这样写:

我使用的是ASP.net MVC 4。如问题所述,如果我将一堆JS文件(或CSS文件)放入一个bundle中,是否会自动进行压缩?例如,我的bundle应该这样写:

        bundles.Add(new ScriptBundle("~/bundles/exampleBundle").Include(
            "~/Scripts/jquery-masked.js"
            "~/Scripts/jquery.idletimer.js"
            ));

或者它应该最初包括被压缩的文件:

        bundles.Add(new ScriptBundle("~/bundles/exampleBundle").Include(
            "~/Scripts/jquery-masked.min.js"
            "~/Scripts/jquery.idletimer.min.js"
            ));

编辑:现在我在想,将.min文件打包是否会增加任何优化。将.min文件包含在捆绑包中是否会提高性能,而不是只包含基本文件?(也许“缩小函数”需要一些时间?)


1
确保您可以添加此参数BundleTable.EnableOptimizations = true; - rnofenko
3个回答

32

您不需要包含缩小文件,这是由捆绑引擎自动完成的。事实上,我记得包含缩小文件会导致问题(也许在最新的mvc版本中已经修复了)。

您可能认为这不起作用,因为只有在web.config文件中设置debug=false时才执行优化(捆绑和缩小)。

<system.web>
     <compilation debug="false" />
</system.web>

即使 debug = true,也有一种方法可以强制启用优化,使用BundleTable.EnableOptimizations。下面是一个例子。

public static void RegisterBundles(BundleCollection bundles)
{
    bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                 "~/Scripts/jquery-{version}.js"));

    BundleTable.EnableOptimizations = true;
}

26

Asp.Net捆绑程序将同一捆绑中的所有脚本捆绑为一个单独的文件,并按照它们在捆绑中定义的顺序列出。然后,这个单一的文件被压缩并传送给客户端。

如果您在脚本目录中包含正常版本和压缩版本的脚本,则在调试会话期间,bundler会自动部署完整的脚本,而在生产期间则部署精简版。除非您希望将压缩版部署到调试会话中,否则应避免在捆绑配置中引用脚本的压缩版本。


3
所以,只是为了澄清一下,如果你的目录中存在被压缩的文件,它将自动部署该文件(在生产会话期间),而不会在运行时进行任何压缩转换吗? - AlbatrossCafe
6
如果捆绑包中所有脚本的缩小版本存在,它们仍将被捆绑成一个单独的捆绑文件,但该文件不会进一步缩小。否则,缩小版本将与非缩小文件一起内联在文件中,并且文件 进行缩小处理。 - Claies

3
这里有两个不同的术语,分别是捆绑和缩小。
缩小: 是指压缩JS文件的版本,通过重命名变量来压缩内容。
捆绑: 则完全是另一回事。为了减少网络往返次数,最好将所有东西合并到一个文件中,并在一个请求中下载到客户端。

因此,您可以捆绑JS的缩小版本以获得此效益。


1
虽然这并没有直接回答问题,但它是关于MinificationBundling之间区别的很好的解释。 - Hakan Fıstık

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接