[前端优化]使用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 优化:提升页面美学与性能
前端CSS优化旨在提升页面美学与性能。通过简化选择器(如避免复杂后代选择器、减少通用选择器使用)、合并样式表、合理组织媒体查询,可减少浏览器计算成本和HTTP请求。利用硬件加速和优化动画帧率,确保动画流畅。定期清理冗余代码并使用缩写属性,进一步精简代码。这些策略不仅加快页面加载和渲染速度,还提升了视觉效果,为用户带来更优质的浏览体验。
|
1月前
|
Dart 前端开发
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
122 75
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
3月前
|
JavaScript 前端开发 程序员
前端原生Js批量修改页面元素属性的2个方法
原生 Js 的 getElementsByClassName 和 querySelectorAll 都能获取批量的页面元素,但是它们之间有些细微的差别,稍不注意,就很容易弄错!
|
17天前
|
前端开发
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
36 1
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
|
1月前
|
前端开发 开发者 UED
《前端技术基础》第02章 CSS基础【合集】
层叠样式表(Cascading Style Sheets,简称CSS)是一种用于描述网页视觉表现的语言。该语言与HTML协同工作,其中HTML负责构建网页的结构,而CSS则负责定义网页的外观和格式。CSS通过一系列规则来实现样式的应用,这些规则由选择器(Selectors)和声明块(Declaration Blocks)构成。选择器的作用是明确指出哪些HTML元素将受到特定样式规则的影响,而声明块则包含了具体的样式声明,这些声明定义了元素的视觉属性和相应的值。
65 1
|
3月前
|
JavaScript 前端开发 Java
springboot解决js前端跨域问题,javascript跨域问题解决
本文介绍了如何在Spring Boot项目中编写Filter过滤器以处理跨域问题,并通过一个示例展示了使用JavaScript进行跨域请求的方法。首先,在Spring Boot应用中添加一个实现了`Filter`接口的类,设置响应头允许所有来源的跨域请求。接着,通过一个简单的HTML页面和jQuery发送AJAX请求到指定URL,验证跨域请求是否成功。文中还提供了请求成功的响应数据样例及请求效果截图。
springboot解决js前端跨域问题,javascript跨域问题解决
|
3月前
|
缓存 JavaScript 前端开发
JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用
本文深入讲解了 JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用。
93 5
|
3月前
|
缓存 前端开发 JavaScript
JavaScript前端路由的实现原理及其在单页应用中的重要性,涵盖前端路由概念、基本原理、常见实现方式
本文深入解析了JavaScript前端路由的实现原理及其在单页应用中的重要性,涵盖前端路由概念、基本原理、常见实现方式(Hash路由和History路由)、优点及挑战,并通过实际案例分析,帮助开发者更好地理解和应用这一关键技术,提升用户体验。
137 1
|
4月前
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
336 14
|
4月前
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
87 0

热门文章

最新文章

  • 1
    前端起dev从110秒减少到7秒, 开发体验大幅提升
    16
  • 2
    无前端经验如何快速搭建游戏站:使用 windsurf 从零到上线的详细指南
    33
  • 3
    【01】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-优雅草卓伊凡拟开发一个一站式家政服务平台-前期筹备-暂定取名斑马家政软件系统-本项目前端开源-服务端采用优雅草蜻蜓Z系统-搭配ruoyi框架admin后台-全过程实战项目分享-从零开发到上线
    38
  • 4
    VSCode AI提效工具,通义灵码前端开发体验
    95
  • 5
    开箱即用的GO后台管理系统 Kratos Admin - 前端权限
    13
  • 6
    以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
    47
  • 7
    大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
    84
  • 8
    【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
    36
  • 9
    【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    159
  • 10
    详解智能编码在前端研发的创新应用
    122