用VCombo来快速减少站点RoundTrip,马上试试!
在Web的体积越来越庞大的现在,Web所依赖的文件,诸如CSS、JS脚本等的数量与日俱增。虽然我们自豪地说我们的浏览器可以跑几个WPF都不卡,我们仍然不能忽视网络迟滞所带来的若干影响,这里就包括RoundTrip的影响。就像有些浏览器同一时间对同一域名/IP地址解析只允许有一个请求。如果我们的请求都来自同一个域,而我们的文件数量又非常多的话,我们所耗费的时间自然也就无故增加了,当然这是没有必要的。RoundTrip的影响还包括每次连接本身所需要的非数据流量,这些对一些流量敏感的用户而言就成为了一些潜在的问题,激烈竞争的现在,能替用户多想就能跑得更快更远。
用来减少RoundTrip的技巧有很多,当然,万变不离其宗,它的起因就是因为一次一次又一次地从客户端向服务器发送请求,减少它的请求,就是减少RoundTrip的数量。所以技巧中的很多内容就是告诉你,去掉不必要的,合并那些应该在一起的,尽可能多地把你的一些资源文件分散到多台服务器(避免同一时刻浏览器对同一域的请求有限制)。例如有很多小图片,则可以用CSS加合并图片的方式来减少RoundTrip,可以参考这里。
说了半天,就要引入我们今天的主角了,它的作用和雅虎Combohandler一致。我写VCombo也就是看到了雅虎Combo的这篇文章。我的代码仅供参考,您可以自行实现更符合您需求的代码。
图1. VCombo原理图
VCombo的功能很简单:
假设原来我们打算添加以下两个CSS文件:
<link href="https://files.cnblogs.com/volnet/gocool.css" rel="stylesheet" type="text/css" />
当前版本包含一些很酷的功能:
- 合并同类型文件(限制不同类型文件合并)。
- 混合不同类型文件聚合(再单独指定contentType(不区分大小写))以聚合包含在其间的该类型的文件。
- 支持限定路径下的文件才可以被安全聚合(防止客户故意请求服务器上非允许资源。)
- 支持远程文件。(http与https)
- 支持缓存(无须每次都生成同样的文件)
- 支持URL安全,可自定义URL规则进行转义,让客户端无法直接手写引用。
- 支持CSS/Javascript的合并,你可以轻易扩展出其他类型的扩展。
- 拒绝对相同文件的重复合并。
- 单个合并后文件最大尺寸限定,单个网络文件最大尺寸限定。
从使用的角度上,其实是非常简单的,执行下列步骤:
- 引用DLL到你的项目中。新建一个Handler/ASPX页面,添加如下代码:
ComboHelper.AutoInovke(context, true);
- 将你原计划分散开的脚本资源或者样式表文件,用EncodeComboUrl(string httpHandler, string paras)(甚至可以不用)做一个合并即可。
因为源代码原理上很简单,这里就不进行赘述,大家自行下载阅读(跟一下就知道自己该改哪里了)。
点击这里:VS2010版本源码下载1(本地), VS2010版本源码下载2,VS2008版源码下载1(本地), VS2008版源码下载2!
posted on 2009-11-19 00:30 volnet(可以叫我大V) 阅读(1442) 评论(9) 编辑 收藏 举报