玩转C科技.NET

从学会做人开始认识这个世界!http://volnet.github.io

导航

用VCombo来快速减少站点RoundTrip,马上试试!

在Web的体积越来越庞大的现在,Web所依赖的文件,诸如CSS、JS脚本等的数量与日俱增。虽然我们自豪地说我们的浏览器可以跑几个WPF都不卡,我们仍然不能忽视网络迟滞所带来的若干影响,这里就包括RoundTrip的影响。就像有些浏览器同一时间对同一域名/IP地址解析只允许有一个请求。如果我们的请求都来自同一个域,而我们的文件数量又非常多的话,我们所耗费的时间自然也就无故增加了,当然这是没有必要的。RoundTrip的影响还包括每次连接本身所需要的非数据流量,这些对一些流量敏感的用户而言就成为了一些潜在的问题,激烈竞争的现在,能替用户多想就能跑得更快更远。

用来减少RoundTrip的技巧有很多,当然,万变不离其宗,它的起因就是因为一次一次又一次地从客户端向服务器发送请求,减少它的请求,就是减少RoundTrip的数量。所以技巧中的很多内容就是告诉你,去掉不必要的,合并那些应该在一起的,尽可能多地把你的一些资源文件分散到多台服务器(避免同一时刻浏览器对同一域的请求有限制)。例如有很多小图片,则可以用CSS加合并图片的方式来减少RoundTrip,可以参考这里

说了半天,就要引入我们今天的主角了,它的作用和雅虎Combohandler一致。我写VCombo也就是看到了雅虎Combo的这篇文章。我的代码仅供参考,您可以自行实现更符合您需求的代码。

twitter.com/volnet
图1. VCombo原理图

VCombo的功能很简单:
假设原来我们打算添加以下两个CSS文件:

<link href="~/Styles/Site.css" rel="stylesheet" type="text/css" />
<link href="https://files.cnblogs.com/volnet/gocool.css" rel="stylesheet" type="text/css" />
现在我们可以改写成:
<link href="<%=VCombo.ComboHelper.EncodeComboUrl("ComboHandler.ashx", "https://files.cnblogs.com/volnet/gocool.css&/Styles/Site.css")%>" rel="stylesheet" type="text/css" />
最后我们将得到如下代码:
<link href="ComboHandler.ashx?http%3a%2f%2ffiles.cnblogs.com%2fvolnet%2fgocool.css%26%2fStyles%2fSite.css" rel="stylesheet" type="text/css" />

当前版本中,被合并的文件不应该包含一些会阻断合并后文件的信息:如:@charset "gb2312";,如果不是出现在第一个文件中,则有可能影响使用。

 

当前版本包含一些很酷的功能:

  • 合并同类型文件(限制不同类型文件合并)。
  • 混合不同类型文件聚合(再单独指定contentType(不区分大小写))以聚合包含在其间的该类型的文件。
  • 支持限定路径下的文件才可以被安全聚合(防止客户故意请求服务器上非允许资源。)
  • 支持远程文件。(http与https)
  • 支持缓存(无须每次都生成同样的文件)
  • 支持URL安全,可自定义URL规则进行转义,让客户端无法直接手写引用。
  • 支持CSS/Javascript的合并,你可以轻易扩展出其他类型的扩展。
  • 拒绝对相同文件的重复合并。
  • 单个合并后文件最大尺寸限定,单个网络文件最大尺寸限定。

 

从使用的角度上,其实是非常简单的,执行下列步骤:

  1. 引用DLL到你的项目中。新建一个Handler/ASPX页面,添加如下代码:
    ComboHelper.AutoInovke(context, true);
  2. 将你原计划分散开的脚本资源或者样式表文件,用EncodeComboUrl(string httpHandler, string paras)(甚至可以不用)做一个合并即可。

 

因为源代码原理上很简单,这里就不进行赘述,大家自行下载阅读(跟一下就知道自己该改哪里了)。

点击这里:VS2010版本源码下载1(本地), VS2010版本源码下载2,VS2008版源码下载1(本地), VS2008版源码下载2

posted on 2009-11-19 00:30  volnet(可以叫我大V)  阅读(1441)  评论(9编辑  收藏  举报

使用Live Messenger联系我
关闭