Bundling and Minification 捆绑和压缩特性
捆绑和压缩两种技术可以在ASP.NET 4.5中使用,以提高请求的负载时间。捆绑和压缩的改善加载时间减少到服务器的请求数和减少大小的请求的资产(如CSS和JavaScript)。
第一部分:介绍
由于目前主要浏览器的 同时连接每个主机名的(并发连接)数量限制是6个 ,意味着当这6次请求正在处理的时候 额外的请求则会处于排队等待 下面用ie10的开发工具来看一下 vs2012自动生成的mvc4网页的请求例子。
双击某个路径(下图显示的时间为加载 / Scripts/MyScripts/JavaScript6.js文件的细节)可以查看明细信息:
上面的图像显示了启动的情况下,给出了时间的请求被排队,因为浏览器的并发连接数限制。在这种情况下,将请求排队等待另一个请求完成46毫秒。
1.捆绑#
捆绑是ASP.NET 4.5中的新功能,使得很容易地合并或多个文件捆绑成一个文件。您可以创建CSS,JavaScript和其他捆绑。较少的文件意味着更少的HTTP请求,并可以提高页面加载性能。#
下图显示了相同的时序视图的关于查看先前所显示的,但是这一次捆绑和压缩启用。
忽略图片那些请求 可以明显看到(css js)请求的次数
2.压缩 #
压缩执行各种不同的代码优化的脚本或CSS,如删除不必要的空白和注释,并缩短变量名的一个字符。考虑下面的JavaScript功能。
AddAltToImg = function (imageTagAndImageID, imageContext) { ///<signature> ///<summary>给图片添加一个alt // </summary> //<param name="imgElement" type="String">The image selector.</param> //<param name="ContextForImage" type="String">The image context.</param> ///</signature> var imageElement = $(imageTagAndImageID, imageContext); imageElement.attr( 'alt' , imageElement.attr( 'id' ).replace(/ID/, '' )); } |
压缩后的
AddAltToImg = function (n, t) { var i = $(n, t); i.attr( "alt" , i.attr( "id" ).replace(/ID/, "" )) } |
来看一下BM的性能提升
第二部分:在ASP.NET MVC 中使用
在创建的默认mvc4示例中的 App_Start \的BundleConfig.cs 文件 其中 RegisterBundles
方法 的代码:
// 有关 Bundling 的详细信息,请访问 http://go.microsoft.com/fwlink/?LinkId=254725 public static void RegisterBundles(BundleCollection bundles) { bundles.Add(new ScriptBundle("~/bundles/jquery").Include( "~/Scripts/jquery-{version}.js")); bundles.Add(new ScriptBundle("~/bundles/JqueryUi").Include( "~/Scripts/jquery-ui-{version}.js", "~/Scripts/jquery.ui.datepicker-zh-CN.js")); bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include( "~/Scripts/jquery.unobtrusive*", "~/Scripts/jquery.validate*")); bundles.Add(new ScriptBundle("~/bundles/EasyUi").Include( "~/Scripts/EasyUi/easyloader.js")); bundles.Add(new ScriptBundle("~/bundles/kindeditor").Include( "~/Scripts/kindeditor/kindeditor-min.js", "~/Scripts/kindeditor/lang/zh_CN.js")); bundles.Add(new ScriptBundle("~/Ztree").Include( "~/Scripts/Ztree/jquery.ztree.core-{version}.js")); // 使用 Modernizr 的开发版本进行开发和了解信息。然后,当你做好 // 生产准备时,请使用 http://modernizr.com 上的生成工具来仅选择所需的测试。 bundles.Add(new ScriptBundle("~/bundles/modernizr").Include( "~/Scripts/modernizr-*")); bundles.Add(new StyleBundle("~/Css").Include("~/Content/Default/Style.css")); bundles.Add(new StyleBundle("~/UserCss").Include("~/Content/Default/User/Style.css")); bundles.Add(new StyleBundle("~/ManageCss").Include("~/Content/Default/Manage/Style.css")); bundles.Add(new StyleBundle("~/EasyUi/icon").Include("~/Scripts/EasyUi/themes/icon.css")); bundles.Add(new StyleBundle("~/JqueryUiMetro").Include("~/Content/JqueryUi/Metro/jquery-ui-{version}.css")); bundles.Add(new StyleBundle("~/ZtreeCss").Include("~/Content/zTree/Default.css")); }
CDN用法:看跟上面的区别#
public static void RegisterBundles(BundleCollection bundles) { //bundles.Add(new ScriptBundle("~/bundles/jquery").Include( // "~/Scripts/jquery-{version}.js")); bundles.UseCdn = true; //enable CDN support //add link to jquery on the CDN var jqueryCdnPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.min.js"; bundles.Add(new ScriptBundle("~/bundles/jquery", jqueryCdnPath).Include( "~/Scripts/jquery-{version}.js")); // Code removed for clarity. }
在上面的代码中,jQuery将被要求在释放模式和调试版本的jQuery的CDN,而在本地调试模式将获取。当使用CDN,CDN请求失败的情况下,你应该有一个回退机制。下面的标记片段从去年底的布局文件显示脚本添加到请求jQuery的CDN失败。
</footer> @Scripts.Render("~/bundles/jquery") <script type="text/javascript"> if (typeof jQuery == 'undefined') { var e = document.createElement('script'); e.src = '@Url.Content("~/Scripts/jquery-1.7.1.js")'; e.type = 'text/javascript'; document.getElementsByTagName("head")[0].appendChild(e); } </script> @RenderSection("scripts", required: false) </body> </html>
使用CDN#
创建一个包#
代码显示了如何将多个文件添加到一个包
bundles.Add(new StyleBundle("~/Content/themes/base/css").Include( "~/Content/themes/base/jquery.ui.core.css", "~/Content/themes/base/jquery.ui.resizable.css", "~/Content/themes/base/jquery.ui.selectable.css", "~/Content/themes/base/jquery.ui.accordion.css", "~/Content/themes/base/jquery.ui.autocomplete.css", "~/Content/themes/base/jquery.ui.button.css", "~/Content/themes/base/jquery.ui.dialog.css", "~/Content/themes/base/jquery.ui.slider.css", "~/Content/themes/base/jquery.ui.tabs.css", "~/Content/themes/base/jquery.ui.datepicker.css", "~/Content/themes/base/jquery.ui.progressbar.css", "~/Content/themes/base/jquery.ui.theme.css"));
前台使用Render来显示:
<!DOCTYPE html>
<htmllang="en">
<head>
@* Markup removed for clarity.*@
@Styles.Render("~/Content/themes/base/css", "~/Content/css")
@Scripts.Render("~/bundles/modernizr")
</head>
<body>
@* Markup removed for clarity.*@
@Scripts.Render("~/bundles/jquery")
@RenderSection("scripts", required: false)
</body>
</html>
#
使用通配符"*"来选择文件#
bundles.Add(new StyleBundle("~/jQueryUI/themes/baseAll") .IncludeDirectory("~/Content/themes/base", "*.css"));
作者: Jimmy-Lee
出处:https://www.cnblogs.com/DemoLee/archive/2013/03/11/2953757.html
版权:本文采用「署名-非商业性使用-相同方式共享 4.0 国际」知识共享许可协议进行许可。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· Ai满嘴顺口溜,想考研?浪费我几个小时
· Browser-use 详细介绍&使用文档
· 软件产品开发中常见的10个问题及处理方法