我很想知道 asp.net 捆绑是如何工作的。
我知道我们必须将所有脚本、CSS 和图像添加到包中,以便浏览器启动对所有资源的单一请求。
我对页面如何从客户端浏览器引用这些捆绑资源感到困惑。
最佳答案
我们来看看在 System.Web.Optimization 中使用捆绑时会发生什么。
在这个例子中,我使用了“空的 ASP.NET MVC 4 模板”并从 nuget 中获取了最新的“Microsoft.AspNet.Web.Optimization”包。
然后我继续注册 2 个 javascript 文件。一个用于 jquery,另一个用于 bootstrap 。
public static void RegisterBundles(BundleCollection bundles)
{
var javascriptBundle = new Bundle("~/bundles/javascripts")
.Include("~/Scripts/jquery-{version}.js")
.Include("~/Content/bootstrap/js/bootstrap.js");
bundles.Add(javascriptBundle);
}
现在我们已经完成了设置,让我们看看当我们查看页面时会发生什么。
您可以看到这两个 javascript 文件都像我们通常所做的那样被包含在内。这就是在 web.config 中设置“调试”标志时发生的情况。
让我们把它变成假,看看现在会发生什么。
现在我们看到的是添加了一个单一的引用,但具有非常独特的位置。通过单击它,我们看到它会吐出我们包中引用的两个 javascript 文件的缩小和组合版本。
这个有趣的查询字符串参数 v=loMmcAiXrKwMoVsM8Ok8Q5jVmuFQUI3fiiRVJQC33Hs1 是对我们内容的引用,我们可以看到,无论我们访问该网站多少次,它都会保持不变。 (即多次刷新)。
让我们看看 fiddler 怎么说我们的 javascript 文件的引用。
我们可以看到响应是可缓存的。缓存过期已设置为“2014 年 3 月 26 日星期三 06:49:06 GMT”。从今天开始快一年了。
对资源的后续请求将从浏览器的缓存中读取。
“此 HTTP/304 响应表明现有缓存响应保持新鲜。HTTP/304 响应上的缓存生存期 header 可用于更新缓存响应的新鲜度。”
如果您需要更多信息,另见 http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification
关于asp.net - asp.net 捆绑如何在内部工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15629816/