[前端优化]使用Combres合并对js、css文件的请求

简介: 在前端优化的各种金律铁规中,“减少客户端对资源的请求”都会在其中出现,刚好最近对网站做一些优化,使用了一下Combres组件,有点心得,遂整理成文。 园子中也有几篇Combres组件的介绍,如:Combres库学习小结以及部分源码分析和使用Combres 库 ASP.NET 网站优化。

在前端优化的各种金律铁规中,“减少客户端对资源的请求”都会在其中出现,刚好最近对网站做一些优化,使用了一下Combres组件,有点心得,遂整理成文。

园子中也有几篇Combres组件的介绍,如:Combres库学习小结以及部分源码分析使用Combres 库 ASP.NET 网站优化。可部署时参考起来显得有些简略,所以此文也算对此类文章的补充。

配置组件

此组件的一些作用和原理在我上面提及的两篇文章中有介绍,可以自行移步至对应的文章中查看。这里还有有作者介绍的一些详细的使用方法

下载Combres组件,下载下来的包里包含了DLL、帮助文件、源码和一些例子,我们现在直接来看如何部署。

在下载下来的\Binary\merged\中有一个Combres.dll,在readme文件中得知其对可能要用到的dll都进行了打包,如Combres.dll、fasterflect.dll、log4net.dll、ajaxmin.dll、 yahoo.yui.compressor.dll等等。

在项目中引用此dll,下面来配置下配置文件。

首先配置下web.config。

在configSections配置节下添加

1  < section  name ="combres"  type ="Combres.ConfigSectionSetting, Combres, Version=2.0.0.0, Culture=neutral, PublicKeyToken=49212d24adfbe4b4" />  

在configuration配置节下添加Combres配置文件的路径,此文件的作用我们下面再说。

1  < combres  definitionUrl ="~/App_Data/combres.xml" />

配置好了后应该像这样

1  < configSections >
2         < section  name ="combres"  type ="Combres.ConfigSectionSetting, Combres, 
3      Version=2.0.0.0, Culture=neutral, PublicKeyToken=49212d24adfbe4b4" />
4    </ configSections >
5    < combres  definitionUrl ="~/App_Data/combres.xml" />

还需要添加httpModules的节点

1  < httpModules >
2           < add  name ="UrlRoutingModule"  type ="System.Web.Routing.UrlRoutingModule, 
3      System.Web.Routing, Version=3.5.0.0, Culture=neutral, 
4      PublicKeyToken=31BF3856AD364E35" />
5  </ httpModules >

注意:需要在项目中添加对System.Web.Routing的引用。

下面来配置Combres的配置文件,按照上面的路径配置,我们就在App_Data下添加combres.xml文件。

添加如下格式的配置文件。 

 1  <? xml version="1.0" encoding="utf-8"  ?>
 2  < combres  xmlns ='urn:combres' >
 3     < resourceSets  url ="~/combres.axd"  defaultDuration ="30"  
 4                                  defaultVersion ="auto"  
 5                                  defaultDebugEnabled ="auto"   >
 6       < resourceSet  name ="siteCss"  type ="css" >
 7         < resource  path ="~/styles/site.css"   />
 8         < resource  path ="~/styles/jquery-ui-1.7.2.custom.css"   />
 9       </ resourceSet >
10       < resourceSet  name ="siteJs"  type ="js" >
11         < resource  path ="~/scripts/jquery-1.3.2.js"   />
12         < resource  path ="~/scripts/jquery-ui-1.7.2.custom.min.js"   />
13       </ resourceSet >
14     </ resourceSets >
15  </ combres >     
  • defaultDuration 默认缓存的时间,单位为天数
  • defaultVersion 合并后的资源版本,在你修改了资源文件后需要对版本进行修改,你可以指定auto或者手动设置一个版本号
  • defaultDebugEnabled 调试的模式,为true时那么资源文件不进行压缩,开发时可以设置成true,上线后设置成false

 具体添加压缩方法的配置节点,用于选择哪种方法对资源文件进行压缩

 1  < cssMinifiers >
 2       < minifier  name ="yui"  type ="Combres.Minifiers.YuiCssMinifier, Combres" >
 3         < param  name ="CssCompressionType"  type ="string"  value ="StockYuiCompressor"   />
 4         < param  name ="ColumnWidth"  type ="int"  value ="-1"   />
 5       </ minifier >
 6     </ cssMinifiers >
 7     < jsMinifiers >
 8       < minifier  name ="msajax"  type ="Combres.Minifiers.MSAjaxJSMinifier, Combres"  
 9      binderType ="Combres.Binders.SimpleObjectBinder, Combres" >
10         < param  name ="CollapseToLiteral"  type ="bool"  value ="true"   />
11         < param  name ="EvalsAreSafe"  type ="bool"  value ="true"   />
12         < param  name ="MacSafariQuirks"  type ="bool"  value ="true"   />
13         < param  name ="CatchAsLocal"  type ="bool"  value ="true"   />
14         < param  name ="LocalRenaming"  type ="string"  value ="CrunchAll"   />
15         < param  name ="OutputMode"  type ="string"  value ="SingleLine"   />
16         < param  name ="RemoveUnneededCode"  type ="bool"  value ="true"   />
17         < param  name ="StripDebugStatements"  type ="bool"  value ="true"   />
18       </ minifier >
19     </ jsMinifiers >

 要使用哪种压缩方法,在resourceSet或者在resource上添加相应的属性即可,配置后像下面这样

 1  <? xml version="1.0" encoding="utf-8"  ?>
 2  < combres  xmlns ='urn:combres' >
 3     < cssMinifiers >
 4       < minifier  name ="yui"  type ="Combres.Minifiers.YuiCssMinifier, Combres" >
 5         < param  name ="CssCompressionType"  type ="string"  value ="StockYuiCompressor"   />
 6         < param  name ="ColumnWidth"  type ="int"  value ="-1"   />
 7       </ minifier >
 8     </ cssMinifiers >
 9     < jsMinifiers >
10       < minifier  name ="msajax"  type ="Combres.Minifiers.MSAjaxJSMinifier, Combres"  
11      binderType ="Combres.Binders.SimpleObjectBinder, Combres" >
12         < param  name ="CollapseToLiteral"  type ="bool"  value ="true"   />
13         < param  name ="EvalsAreSafe"  type ="bool"  value ="true"   />
14         < param  name ="MacSafariQuirks"  type ="bool"  value ="true"   />
15         < param  name ="CatchAsLocal"  type ="bool"  value ="true"   />
16         < param  name ="LocalRenaming"  type ="string"  value ="CrunchAll"   />
17         < param  name ="OutputMode"  type ="string"  value ="SingleLine"   />
18         < param  name ="RemoveUnneededCode"  type ="bool"  value ="true"   />
19         < param  name ="StripDebugStatements"  type ="bool"  value ="true"   />
20       </ minifier >
21     </ jsMinifiers >
22     < resourceSets  url ="~/combres.axd"  defaultDuration ="30"  
23                                  defaultVersion ="auto"  
24                                  defaultDebugEnabled ="auto"   >
25       < resourceSet  name ="siteCss"  type ="css"  minifierRef ="yui" >
26         < resource  path ="~/styles/site.css"   />
27         < resource  path ="~/styles/jquery-ui-1.7.2.custom.css"   />
28       </ resourceSet >
29       < resourceSet  name ="siteJs"  type ="js" >
30         < resource  path ="~/scripts/jquery-1.3.2.js"  minifierRef ="msajax"    />
31         < resource  path ="~/scripts/jquery-ui-1.7.2.custom.min.js"  minifierRef ="off"   />
32       </ resourceSet >
33     </ resourceSets >
34  </ combres >

最后还需要在Global.ascx的Application_Start中添加加载的方法即可

1  protected   void  Application_Start( object  sender, EventArgs e)
2  {
3      RouteTable.Routes.AddCombresRoute( " Combres Route " );
4 }

 记得在Global.ascx的头部要引入命名空间

1  <% @ Import Namespace = " System.Web.Routing "   %>
2  <% @ Import Namespace = " Combres "   %>

页面使用

1  <% @ Import Namespace = " Combres "   %>
2  < head  runat ="server" >
3       < title > Using Combres </ title >
4       <% =  WebExtensions.CombresLink( " siteCss " %>
5       <% =  WebExtensions.CombresLink( " siteJs " %>
6  </ head >

页面使用效果

 

当页面中引用了很多个js、css文件时,将都被合并成两个请求,以达到减少HTTP请求的目的。  


作者:Parry
出处:http://www.cnblogs.com/parry/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

相关文章
|
1月前
|
前端开发 JavaScript 算法
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
transform变形 css3在原来的基础上新增了变形和动画相关属性,通过这些属性可以实现以前需要大段JavaScript才能实现的 功能。 CSS3的变形功能可以对HTML组件执行位移、旋转、缩放、倾斜4种几何变换,这样的变换可以控制HTML组件 呈现出丰富的外观。 借助于位移、旋转、缩放、倾斜这4种几何变换,CSS3提供了transition动画。 transition动画比较简单,只要指定HTML组件的哪些CSS属性需要使用动画效果来执行变化,并指定动画时间,就可保证动画播放。 比transitio
141 0
|
1月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
Flex 布局 布局的传统解决方案,基于盒状模型,依赖 display 属性 + position属性 + float属性。它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现。 2009年,W3C 提出了一种新的方案----Flex 布局,可以简便、完整、响应式地实现各种页面布局。目前,它已经得到了所有浏览器的支持,这意味着,现在就能很安全地使用这项功能。 一、Flex 布局是什么? Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性。
231 1
|
1月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
盒模型 盒模型: 所谓盒模型,就是浏览器为页面中的每个HTML元素生成的矩形盒子。 这些盒子们都要按照可见板式模型在页面上排布。 可见的板式模型主要由三个属性控制:position 属性、display 属性和 float属性。 position属性控制页面上元素间的位置关系。 display属性控制元素是堆叠、并排或者不在页面上显示。 float属性提供控制的方法,以便于把元素组成成多栏布局。 盒模型讲解: 在默认的情况下,每个盒子的边框是不可见的,背景也是透明的。 所以我们 不能直接的看到页面中的盒
148 1
|
1月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
伪类:伪类这个叫法源自于它们跟类相似,但实际上并没有类会附加到标记中的标签上。 伪类分为两种(以及新增的伪类选择器): UI伪类:会在HTML元素处于某种状态时(例如:鼠标指针位于连接上),为该元素应用CSS样式。 :hover 结构化伪类:会在标记中存在某种结构上的关系时 例如: 某元素是一组元素中的第一个或最后一个,为该元素应用CSS样式。 :not和:target(CSS3新增的两个特殊的伪类选择器)
145 1
|
5月前
|
移动开发 前端开发 JavaScript
征信报告修改器,征信报告生成器,制作软件无痕修改软件【js+html+css】
本项目为信用评分模拟器教学工具,采用HTML5实现,仅供学习参考。核心功能通过JavaScript构建,包含虚拟数据生成、权重分配及信用因素分析(如还款记录、信用使用率等)。
|
2月前
|
JavaScript 前端开发 开发者
Nest.js控制器深度解析:路由与请求处理的高级特性
以上就是对 NestJS 控制层高级特性深度解析:从基本概念到异步支持再到更复杂场景下拦截其与管道等功能性组件运用都有所涉及,希望能够帮助开发者更好地理解和运用 NestJS 进行高效开发工作。
321 15
|
1月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
Animation属性 css3为Animation动画提供的几个属性如下: 属性名 属性值 animation-name 指定动画名称,该属性指定一个已有的关键帧定义。 animation-duration 指定动画持续时间。 animation-timing-funtion 指定动画变化速度。 animation-delay 指定动画延迟多长时间才开始执行。 animation-iteration-count 指定动画的循环执行次数。 animation:这是一个复合属性。
170 1
|
1月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
position定位(核心) 我们讲盒模型的时候,提到了3个属性可以用来控制页面排版。 三大属性:position属性,display属性,float属性。 position 属性控制页面上元素间的位置关系。 display 属性控制页面元素是否显示或者是堆叠还是并排显示。 float 属性提供控制方法。 通过float这种控制方法,可以实现多栏布局,导航菜单等等。 position属性是干嘛用的?怎么用?有哪些属性值? position属性控制页面上元素间的位置关系,也就是排版。 怎么用?要知道怎么用
318 0
|
1月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
继承 我们的CSS中很多的属性也是可以继承的,其中相当一部分是跟文字的相关的,比如说颜色、字体、字号。 当然还有一部分是不能继承的。 例如边框、内外边距。 层叠 层叠是CSS的核心机制。 层叠的工作机制: 当元素的同一个样式属性有多种样式值的时候,CSS就是靠层叠机制来决定最终应用哪种样式。 层叠规则: 层叠规则一:找到应用给每个元素和属性的声明。 说明:浏览器在加载每个页面时,都会据此查找到每条CSS规则, 并标识出所有受到影响的HTML元素。
81 1
|
5月前
|
前端开发 JavaScript
个人征信电子版无痕修改, 个人信用报告pdf修改,js+html+css即可实现【仅供学习用途】
本代码展示了一个信用知识学习系统的前端实现,包含评分计算、因素分析和建议生成功能。所有数据均为模拟生成

热门文章

最新文章

下一篇
oss云网关配置