ASP.NET使用httphandler打包多CSS或JS文件以加快页面加(3)

HttpHandler如何工作

首先handler从请求字符串中读取集合名、类型以及版本:

ASP.NET使用httphandler打包多CSS或JS文件以加快页面加


如果要加载的文件集合已经被缓存了,那将直接从cache中写入响应流。否则,文件将被一个接一个地加载,然后被存储在一个MemoryStream。MemoryStream被通过GzipStream压缩(如果浏览器支持压缩输出)。

ASP.NET使用httphandler打包多CSS或JS文件以加快页面加


在整合了所有的文件并压缩后,被整合的字节流被缓存起来,以让随后的请求可以直接地从缓存获取数据。

ASP.NET使用httphandler打包多CSS或JS文件以加快页面加


GetFileBytes方法读取一个文件或者URL,然后返回字节。所以,你可以在你的网站里使用虚拟路径,或者你可以使用URL指向一个宿主在另外的域中的Js/Css文件。

ASP.NET使用httphandler打包多CSS或JS文件以加快页面加


WriteBytes方法有许多技巧在里面。它提供了一个基于是否字节是压缩格式的响应头。然后它提供了一个缓存标识头,让浏览器缓存响应内容。

ASP.NET使用httphandler打包多CSS或JS文件以加快页面加


怎样使用这个handler呢?

包含HttpCombiner.ashx在你的项目中 定义文件集合在你的web.config配置文件的<appSettings>节点中 改变的<link>与<script>标签,使用HttpCombiner.ashx需要的格式:HttpCombiner.ashx?s=<setName>&t=<contentType>&v=<versionNo>

源代码:

 

免费下载地址在

用户名与密码都是

具体下载目录在 /2012年资料/4月/22日/ASP.NET使用httphandler打包多CSS或JS文件以加快页面加载速度/

译者注:今天在尝试使用该技术时,遇到一个问题。那就是在打包压缩CSS文件时。如果文件中涉及到图片路径(例如background-img的url属性时)。无法正确请求图片。原因是,通常这些图片都使用的是相对路径。浏览器通常情况下载获取到CSS文件后,会以CSS文件本身作为参考,根据图片的相对路径来查找图片。而批量打包时,用来参考的路径本身变成了handler的路径,因而会导致查找图片的路径出错而无法下载。其实就算是人为将图片的路径设置成相对于本handler的相对路径仍然无法下载!

解决方案:采用绝对路径,但也取决于网站的发布方式。如果发布时新建的网站,那么可以直接通过"/"来从根目录开始表达CSS中的背景图片的绝对路径。因为新建网站时,可以直接用“/”来标识根目录。而新建虚拟目录时,则需要加入新建虚拟目录的文件夹名。如myweb,则绝对路径表示为"/myweb/images......."这样才能正确地获取图片。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/8c3ddafd50189fe39932c00117ebcbce.html