优化ASP.NET网页网站 - 捆绑和缩小

ASP.NET 4.5介绍了提高网站性能的新功能。在一个名为新图书馆中交付 System.Web.Optimization.,捆绑和剪切使您可以将多个JavaScript或CSS今天福彩字谜总汇组合成一个捆绑包,并缩小它们,从而减少浏览器必须制作的HTTP请求的数量,减少今天福彩字谜总汇大小,以及整体上提高现场的性能,尤其是超过较慢(读取3G)网络。

如果您使用Visual Studio Express 2012或Visual Studio 2012创建网页网站, system.web.optimization.dll. 包含作为模板的一部分,它是WebMatrix Starter站点模板的扩展版本。然后你必须解开你不想要的所有杂乱。你不应该删除 antlr3.runtime.dll. 或者 webgrease.dll.,因为这些是捆绑和缩小系统所需的组件。

如果使用WebMatrix创建您的网站,则不会包含任何模板 system.web.optimization.dll.。你必须从尼古特得到它。您可以使用Nuget Gallery功能进行操作,虽然在我尝试时正在播放,所以我使用了包管理管理器。只是为了添加一层混乱,您需要安装一个调用的包 Microsoft.aspnet.Web.Optimization.。不仅如此,而且程序包仅在默认WebMatrix包之外可用,因此您需要将源设置为默认值(全部)。

安装后,您可以使用新功能。

裁队自动进行。该过程可在.js和.css今天福彩字谜总汇中减少空白空间,删除任何注释以及在.js今天福彩字谜总汇的情况下,还将缩短变量名称。 可以实现显着的今天福彩字谜总汇大小节省。另一方面,捆绑,需要以编程方式管理。

A 是将组合成一个今天福彩字谜总汇的今天福彩字谜总汇集合。基本上,它们的内容被缩小,然后附加到彼此。显然,特别是在.js今天福彩字谜总汇的情况下,重要的是要以正确的顺序确保将今天福彩字谜总汇添加到捆绑包中。捆绑包存放在一个 捆Table. 物体作为A. 捆collection.。创造一个最好的地方 捆collection. 在_appstart.cshtml今天福彩字谜总汇中:

@using System.Web.Optimization.;
@{
    var bundles = 捆Table..Bundles;


}

注意 System.Web.Optimization. 通过a引用 使用指令.

您根据其内容创建捆绑包。使用javascript捆绑包使用 scriptbundle. 类型。使用该样式的表捆绑包 样式机器 类型。例如,这里是如何创建ScriptBundle并将其添加到的 捆Table.:

var jquery = new scriptbundle.("~/bundles/jquery");
jquery.Include("~/Scripts/jquery-1.8.1.min.js");
bundles.Add(jquery);

新的 scriptbundle. 对象是给出了一个可以是您喜欢的虚拟路径。它有效地作为可以识别捆绑包的名称。它不必匹配网站今天福彩字谜总汇夹结构中的现有路径。事实上,简单的东西 "~/jquery" 会做。一旦捆绑包,您可以指定使用include()方法所包含的实际今天福彩字谜总汇。您提供的虚拟路径必须与实际今天福彩字谜总汇位置相关,否则找不到今天福彩字谜总汇。在上面的示例中,该今天福彩字谜总汇已按名称指定,但还有其他方法可以确定捆绑包的内容,因为您很快就会看到。可以通过将其虚拟位置传递给多个今天福彩字谜总汇来指定 包括 方法作为逗号分隔的列表或字符串数​​组。最后,使用BundleCollection的BundleLable的BundleCollection将捆绑包添加到BundleLable的Bundlecollection中 添加 method.

样式机器对象以完全相同的方式创建:

bundles.Add(new 样式机器("~/bundles/css").Include(
                "~/Styles/site.css"
            ));

该示例说明了产生更简洁的语法的方法。

以下显示了几个今天福彩字谜总汇添加到捆绑包中,使用不同的方法来定义今天福彩字谜总汇:

bundles.Add(new scriptbundle.("~/bundles/jquery").Include(
                "~/Scripts/jquery-{version}.js",
                "~/Scripts/jquery.validate*"
           ));

{版本} 通配符允许您更新到较新版本的jQuery,而无需更改引用今天福彩字谜总汇的代码。目前,我网站上的1.8.1。如果1.8.2出来,我只需替换今天福彩字谜总汇。 1.8.2将由捆绑机制自动拾取。通配符确实不止于此。它在调试期间拾取完整版本,以及任何缩小版本,如果该网站设置为释放模式。调试和发布将稍后讨论。

第二个今天福彩字谜总汇功能使用*通配符。将包含匹配指定模式的任何今天福彩字谜总汇,其中多个今天福彩字谜总汇按字母顺序添加。每个虚拟路径只能使用一个通配符。在上面的Ecxample中,通配符用作后缀。它也可以用作今天福彩字谜总汇扩展名的前缀:

bundles.Add(new scriptbundle.("~/bundles/jquery").Include(
                "~/Scripts/*.js"
           ));

这将导致所有今天福彩字谜总汇都以字母顺序包含在一个包中。通常,多个今天福彩字谜总汇势力对他人有依赖关系,因此引用今天福彩字谜总汇的顺序是重要的,需要管理。因此,您不太可能使用*通配符匹配。

涂情况 方法提供了另一种用于指定多个今天福彩字谜总汇的钝器:

bundles.Add(new 样式机器("~/allStyles").IncludeDirectory("~/Styles", "*.css")); 

这会导致样式今天福彩字谜总汇夹中的所有.css今天福彩字谜总汇按字母顺序捆绑在一起,因此与上一个通配符示例没有不同。但是,“包含核解方法”提供过载的版本,该版本允许您在搜索中包含子今天福彩字谜总汇夹以匹配今天福彩字谜总汇:

bundles.Add(new 样式机器("~/allStyles").IncludeDirectory("~/Styles", "*.css", true));   

已创建捆绑包,您需要一种方法可以在页面中使用它们。有两种课程来管理: 脚本风格。两者都有一个静态渲染方法,它采用逗号分隔的虚拟路径或它们的数组。这些路径是您给予捆绑包的标识符。以下是销售_APPStart.cshtml今天福彩字谜总汇的示例:

@using System.Web.Optimization.;
@{
    var bundles = 捆Table..Bundles;
    
    bundles.Add(new scriptbundle.("~/bundles/jquery").Include(
                    "~/Scripts/jquery-{version}.js",
                    "~/Scripts/jquery.validate*",
                    "~/Scripts/jquery.unobtrusive*"
                ));

    bundles.Add(new scriptbundle.("~/bundles/knockout").Include(
                    "~/Scripts/knockout-{version}.js",
                    "~/Scripts/knockout.mapping-latest"
                ));

    bundles.Add(new scriptbundle.("~/bundles/modernizr").Include(
                    "~/Scripts/modernizr-*"
                ));

    bundles.Add(new 样式机器("~/bundles/css").Include(
                    "~/Styles/site.css"
                ));

    bundles.Add(new 样式机器("~/bundles/jquery-css").Include(
                    "~/Styles/jquery.ui.core.css",
                    "~/Styles/jquery.ui.resizable.css",
                    "~/Styles/jquery.ui.selectable.css",
                    "~/Styles/jquery.ui.accordion.css",
                    "~/Styles/jquery.ui.autocomplete.css",
                    "~/Styles/jquery.ui.button.css",
                    "~/Styles/jquery.ui.dialog.css",
                    "~/Styles/jquery.ui.slider.css",
                    "~/Styles/jquery.ui.tabs.css",
                    "~/Styles/jquery.ui.datepicker.css",
                    "~/Styles/jquery.ui.progressbar.css",
                    "~/Styles/jquery.ui.theme.css"
                ));           
}

已经创建了三个ScriptBundles以及两个样式捆绑包。要呈现它们,您将包含使用指令 System.Web.Optimization. 然后使用他们各自的 使成为 method:

@using System.Web.Optimization.;
@{
    
}

<!DOCTYPE html>

<html lang="en">
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width" />
        <title>My Site's Title</title>
        <link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" />
        @脚本.Render("~/bundles/jquery", "~/bundles/knockout", "~/bundles/modernizr")
        @风格.Render("~/bundles/css", "~/bundles/jquery-css")
    </head>
    <body>
        
    </body>
</html>

此刻,如果运行该页面,则今天福彩字谜总汇都已正确引用今天福彩字谜总汇:

但是,如果查看已包含的jQuery今天福彩字谜总汇,则会看到它是完整的开发版本。同样,已包括淘汰淘汰的调试版本。没有缩小今天福彩字谜总汇。这是因为,默认情况下,Web页面应用程序在调试模式下运行,如Web.config今天福彩字谜总汇中的编译设置所示。您需要设置debug = false以获得缩小工作。这也有助于提高部署网站的性能:

<?xml version="1.0" encoding="utf-8"?>

<configuration>
  <system.web>
    <compilation debug="false" targetFramework="4.0" />
  </system.web>
</configuration>

进行了变化,如果重新运行该网站,则由您作为虚拟路径提供的值进行转换,拆缩和引用捆绑包:

<!DOCTYPE html>

<html lang="en">
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width" />
        <title>My Site's Title</title>
        <link href="/favicon.ico" rel="shortcut icon" type="image/x-icon" />
        <script src="/bundles/jquery?v=MIr0sK49sxIK-epXF1SVcUd13V3eqzcL7nEICnt3vnc1"></script>
<script src="/bundles/knockout?v=pfuk13BYMQiDE7BiWZNzr6dcinflTsFL5KnKHpmJ4nY1"></script>
<script src="/bundles/modernizr?v=Vd40cG5fYxxjdknf_y9ilK-zi7pnjL35tk9IAsOQgQc1"></script>

        <link href="/bundles/css?v=qqSzEfGVYWAqpZj10F9l3OmsaavLPt8zTTTTuSNgO9s1" rel="stylesheet"/>
<link href="/bundles/jquery-css?v=ps9Ga9601PrzNA2SK3sQXlYmNW3igUv5FOdOPWptyus1" rel="stylesheet"/>

    </head>
    <body>
        
    </body>
</html>

捆绑捆绑设置每个捆绑到12个月的内容到期,以便它们被浏览器缓存。除非捆绑更改的内容,否则为每个捆绑的QueryString值不会更改。此时,生成新的QueryString值,该值在浏览器中立即下载修改后的捆绑。

捆绑和缩减被认为是高级主题,这就是为什么库未包含为WebMatrix剃刀模板的一部分。但是,库非常容易添加到WebMatrix网站并使用。很多JavaScript库都带有缩小版本,因此缩小系统在那里没有提供了很多额外的帮助,但它肯定会在您自己的脚本和样式今天福彩字谜总汇中产生好处。