借助HttpCombiner让你的网站加速

news/2024/5/8 21:27:59/文章来源:https://blog.csdn.net/a240856742/article/details/102055937

     上一篇 < 利用Microsoft Ajax Minifier在服务器端对静态资源进行自动化压缩 > 得到不少有意义的交流和建议,最近也在不停的尝试做一些网站优化的工作,我会陆续的写一些或者翻译一些优化方面的文章跟大家交流,一方面提供给有需要的朋友一些参考,另一方面也希望得到高手们的指点。

     经过上一篇文章介绍的压缩步骤,我们的资源文件(没指明则特指js,css静态资源文件)已经减肥成功,保持了苗条的身材,这样从服务器端传输到客户端也没那么费劲了,初步获得小成功,但是根据 雅虎网站页面性能优化的34条黄金守则 提供给我们的建议,让优化工作做得更进一步,比如一个页面引入了4个css文件,5个js文件(这个数目还算过得去,也许还会更多),这样页面载入的时候就会产生9个请求,加之js加载又是阻塞加载的方式,这样也会造成一定程度上的性能损伤。寻思了一会在网上找到这么一个文件HttpCombiner.ashx,接下来介绍它能帮我们做的事情。

HttpCombiner.ashx是一个http处理程序,通过它能够合并多个CSS,Javascript或者url成为一个响应让页面载入加速.同时它可以合并,压缩并缓存响应,这样就使得我们的应用程序更快的加载和具备更好的扩展性。

介绍

用一个大的Javascript或者CSS文件替代多个小体积的Javascript和CSS文件这是一个很好的实践,可以获得更好的可维护性,但是在网站性能方面会产生一定的影响(这里指的是随着文件体积的增大,随之消耗服务器的内存也会增加)。尽管你应该把Javascript代码单独写成小支的文件,CSS文件拆分成小块,但是当浏览器请求这些文件时,会产生同等数量的http请求。每个http请求都会产生一次从你的浏览器到服务器端网络往返过程,并且导致推迟到达服务器端和返回浏览器端的时间,我们称之为延迟。因此,如果你有4个Javascript和3个css文件在页面中被加载,你浪费掉了7次因网络往返过程产生的时间。在美国,延迟平均是70毫秒,这样你就浪费了7*70 = 490毫秒,大致延迟了半秒的时间。在美国之外的国家访问你的页面,平均延迟大约是200毫秒,这意味着你的页面有1400毫秒的时间是在等待中度过。浏览器在你的CSS和Javascript文件完全加载完成之前是不能很好的渲染你的页面的。因此越多的延迟让你的页面载入越慢。

 

延迟导致多大的影响

下图显示每个请求的延迟造成页面加载时显著的延误

2011011017253813.png

你可以通过使用CDN加速来减少等待时间.阅读我前一篇文章关于使用CDN. 然而,一个更好的解决方案是使用一个HttpHandler来合并多个文件成一个文件一次性输出.因此,你只要将多个<script>或者<link>标签合并成为一个并将他们指向HttpHandler,指定哪些文件需要作为一次响应传输到浏览器段.这样就减少了请求次数以及消除因其造成的延迟This saves browser from making many requests and eliminates the latency.

2011011017261523.png

通过上图你可以看见通过合并多个JavaScripts和CSS文件为一所带来各方面的提升。

 在一个电影的web页面中你会看到许多JavaScripts引用

ContractedBlock.gif ExpandedBlockStart.gif 代码
<script type="text/javascript" src="http://www.msmvps.com/Content/JScript/jquery.js"></script>
<script type ="text/javascript" src="http://www.msmvps.com/Content/JScript/jDate.js"></script>
<script type="text/javascript" src="http://www.msmvps.com/Content/JScript/jQuery.Core.js"></script>
<script type="text/javascript" src="http://www.msmvps.com/Content/JScript/jQuery.Delegate.js"></script>
<script type="text/javascript" src="http://www.msmvps.com/Content/JScript/jQuery.Validation.js"> </ script >

你可以用Http Handler通过scripts的设置来实现将多个单独的 <script>标签合并成一个:  

<script type="text/javascript"  src="HttpCombiner.ashx?s=jQueryScripts&t=text/javascript&v=1"></script>

HTTP Handler 通过配置文件中设置的名称读取所有文件合并成一次响应传输到客户端,通过gzip压缩响应节省了宽带使用.此外还会生成合适的缓存头来缓存响应的浏览器缓存,因此,浏览器不会再次向服务器发送请求.

在查询字符串中,'s'指明配置文件中的设置名,'t'为文件的内容类型,'v'为版本号.一旦响应被缓存,如果你更改了配置中任何文件,你将不得不增加参数'v'的值来让浏览器再次下载服务器端最新的响应:

 

<link type="text/css" rel="stylesheet" href="HttpCombiner.ashx?s=CommonCss&t=text/css&v=1"></link>

web.config中的设置如下: 

ContractedBlock.gif ExpandedBlockStart.gif 代码
< appSettings >
    < add key ="jQueryScripts" value ="~/Content/JScript/jquery.js,
            ~/Content/JScript/jDate.js,
            ~/Content/JScript/jQuery.Core.js,
            ~/Content/JScript/jQuery.Delegate.js,
            ~/Content/JScript/jQuery.Validation.js"
/>
    < add key ="CommonCss" value ="~/App_Themes/Default/Theme.css,
            ~/Css/Common.css,
            ~/Controls/Grid/grid.css"
/>
</ appSettings >

 

使用HttpCombiner实现一个网站示例

我已经写好一个测试网站来演示如何使用HttpCombiner.网站包含2个CSS和2个JS文件. default.aspx文件中<link>和<script>标签2个请求都是指向了HttpCombiner.ashx文件 .

2011011017292583.png

下面就是Default.aspx的内容:

2011011017295056.png

就如你所见,页面中 <link >和<script>标签 都同时指向了 HttpCombiner.ashx,并且所带的参数's'就是web.config文件中定义的2组设置 :

2011011017301531.png

该处理程序如何工作:

  • 首先通过传入的参数"s"获得设置名称
  • 然后根据设置名称获得web.config中定义的文件名称(通过特定的分隔符分隔开)
  • 读取每单个文件然后存储到缓冲区
  • 通过gzip压缩缓冲区中的数据
  • 发送压缩后缓冲区中的数据到浏览器端
  • 已压缩后缓冲区的数据使用ASP.NET缓存模块缓存起来以便在频繁请求同一个设置的情况下直接访问缓存而不必从文件系统或者外部URL读取文件

该处理程序带来的好处:

  • 可以节约因网络延迟造成的时间.如果一次性设置的文件越多,节省的网络延迟性时间越多,同时得到的性能提升就越可观.
  • 因为缓存了所有压缩后的响应数据,这样节省了反复执行从文件系统中读取并压缩的步骤,提升了应用程序的伸缩性.

如何让HttpHandler工作

首先处理程序会从QueryString中获取setName,contentType,version三个关键参数:

2011011017304848.png

如果设置的文件已经被缓存起来,它将直接被写入到缓存当中去,否则它们会从MemoryStream中分别被加载。如果浏览器支持压缩输出的话,MemoryStream会使用GZipStream进行压缩

2011011017312082.png

当合并所有文件之后并压缩,合并的二进制流被缓存起来便与频繁的访问可以直接从缓存中读取.

2011011017314951.png

GetFileBytes方法主要是根据文件路径或者http url读取文件并返回二进制。因此您可以使用你站点的虚拟路径或者使用外部站点Javascript/CSS的url

 2011011017322044.png

WriteBytes 方法很巧妙,它会基于二进制流是否为压缩而生成一个合适的header,并设置浏览器缓存头让浏览器缓存服务器端的响应

2011011017325270.png

目前发现部署到运行环境中会出现异常(远程主机关闭了连接。错误代码是 0x80072746。),将上面图片中的代码最后2行替换成

response.Flush();
if (response.IsClientConnected)
response.OutputStream.Write(bytes, 0, bytes.Length);
response.End();
另外就是注意HttpCombiner.ashx文件建议直接放在跟.js或者.css同一个目录下(排除你的项目有统一的路径处理方案),不然会出现路径引用问题

如何使用该文件:

  • 包含HttpCombiner.ashx在你的项目中
  • 在你的web.config的 <appSettings>定义需要设置的文件节点
  • 更改你网站的 <link> <script> 标签指向HttpCombiner.ashx 如下面的格式:
    HttpCombiner.ashx?s=<appSettings里设置的节点名>&t=<文件类型>&v=<版本号>

结尾

本文是在优化实际项目中的总结,解决方案源自网上并加以翻译和整理而成,有不当之处或者建议请大家一起讨论。

原文连接:http://www.codeproject.com/KB/aspnet/HttpCombine.aspx    下载示例

 

===========================================================

补充:

#6楼 冰绿茶 提供的combres组件很有价值,比本文提供的解决方案更有参考性,大家可以猛击连接前往围观,博客园也有相关的介绍文章,这里给出几个连接

http://www.codeproject.com/KB/aspnet/combres2.aspx(codeproject上的原文)

http://www.cnblogs.com/shanyou/archive/2010/04/03/1703597.html(本文评论部分也有很多亮点)

http://www.cnblogs.com/liping13599168/archive/2010/04/04/1704154.html(本文对combres部分源码也进行了分析)


#7楼 ayumi 分享的另外一个关于image sprite的组件,早之前重典有写博文介绍过,在ASP.NET中自动合并小图片并使用CSS Sprite显示出来

转载于:https://www.cnblogs.com/aNd1coder/archive/2011/01/12/Speed-up-your-website-by-using-httpCombiner.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_861090.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从“奥运门票网站800万访问量”想到的成本、质量、进度、风险等关系

看到这个新闻后颇有一番滋味&#xff0c;更体验到我一直关注的软件性能着实无处不在&#xff0c;这个案例也确实值得我们好好反思一下。 不知道网友们有没有报名参加国际日语考试的——这个网站每年05年前都有人不能报名&#xff0c;因为报名人数太多&#xff0c;所以报名当日大…

Google 联合一些社交网站来对抗 facebook

谷歌 (Google) 将与其它一些行业领先的社交网站联手&#xff0c;共同对抗互联网新贵Facebook。  谷歌将于周四推出一个通用标准集 ( OpenSocial )&#xff0c;允许软件开发者为谷歌旗下社交网站Orkut&#xff0c;以及LinkedIn、hi5、Friendster、Plaxo和Ning等其它社交网站…

【Abp VNext】实战入门(十一):【1】基本操作 ——VS编译调试时 .NetCore Web网站Api如何在局域网电脑上访问

一、前言 最近使用 AbpVnext .NetCore 开发项目&#xff0c;网站启动后可以通过 http://localhost:44349 或者http:127.0.0.1:4349正常访问&#xff1b; 但是通过本机局域网IP http://192.168.1.101:44349 却无法访问&#xff0c;防火墙里面44349端口入栈规则也配置了&#x…

【Abp VNext】实战入门(十一):【3】基本操作 ——.NetCore Web网站Api发布部署及如何在局域网电脑上访问

文章目录 一、前言二、步骤1、VS2019编译发布项目&#xff1a;2、直接启动服务&#xff1a;默认地址端口访问3、带参启动服务&#xff1a;指定地址端口访问 三、总结 一、前言 上一章讲解了在VS编译调试的时候如何通过局域网访问.netcore 网站API服务&#xff1b; 这一章主要…

【Abp VNext】实战入门(七):【2】xxx.Web网站层 —— API接口异常全局捕捉,返回简化错误信息

这里写自定义目录标题 一、前言二、解决方案1、解决方案1&#xff1a;2、解决方案2&#xff1a; 三、总结 一、前言 今天突然发现一个问题&#xff0c;xxx.Application应用层中的方法&#xff0c;如果直接抛出异常&#xff08;如&#xff1a;throw new Exception(“手动抛出异…

【流媒体服务】Web网站服务搭建(四):【1】下载安装Nginx网站服务

文章目录 前言一、Nginx是什么&#xff1f;二、安装步骤1、下载Nginx2、解压缩Nginx3、配置Nginx 三、启动预览Nginx网站服务1、启动网站服务2、浏览器预览网站3、如何增加个人网页 四、总结 前言 上2章节讲解了本地视频推流拉流服务VLC以及推流转码服务FFMPEG。 为了实现在网…

Red Hat推出”MugShot”社交娱乐网站

网址: http://mugshot.org/ Red Hat近来推出”MugShot”网站, MugShot是一个致力于在线社交娱乐的开源项目. 它提供了更方便的网页和音乐分享. 当前MugShot处于测试阶段, 只提供邀请帐号. 你可以从这里申请. 更多信息见常见问题和开发主页. 欢迎任何问题和建议.

10个学习资源网站

1 mooc学院 MOOC学院的定位是讨论&#xff0c;点评和记录课程&#xff0c;MOOC学院不直接收录课程内容&#xff0c;只是专注于帮助学习者互相交流&#xff0c;发现课程。你可以在这里发现很多有意思的课程 2 学堂在线 学堂在线是基于互联网技术的新型学习平台&#xff0c;旨在…

WordPress主题可视化建站The7 V8.7

The7汉化版是一个非常漂亮的企业主题&#xff0c;功能非常强大&#xff0c;内置可视化编辑器&#xff0c;操作方便&#xff0c;支持layer和revsilder幻灯片&#xff0c;支持视网膜屏幕、支持自适应&#xff0c;所以流动元素都已集成。不管是企业门户或者个人网站、工作室都非常…

使用requests爬取实习僧网站数据

任务要求&#xff1a; 爬取实习僧网站的招聘公司信息和职位信息&#xff0c;并存储到数据库中&#xff0c;对应的数据库表和需要爬取的字段见下面表一和表二&#xff08;注意&#xff1a;爬取存在的字段&#xff09; 代码以上传带github上&#xff1a;使用requests爬取实习僧网…

程序员实用工具网站

程序员实用工具网站 本文链接&#xff1a; https://blog.csdn.net/m0_38106923/article/details/100130354 1、搜索引擎 2、PPT 3、图片操作 4、文件共享 5、应届生招聘 6、程序员面试题库 7、办公、开发软件 8、高清图片、视频素材网站 9、项目开源 10、算法 11、…

解决通过无线路由上网,但有些网站打不开的问题

问题背景&#xff1a;正常联网状态&#xff0c;所有网站&#xff08;除了腾讯视频页面&#xff09;访问正常&#xff0c;就是进不去腾讯视频&#xff0c;网上查&#xff0c;有人说是找不到DNS的原因&#xff0c;所以今天我就专门看了一下无线路由器DNS。并对本机的无线设置做了…

网站访问过程

1、pc到结束访问的全过程 首先发送dns报文进行dns解析 然后建立tcp连接 web服务提供页面信息 首先发送dns包&#xff0c;进行域名解析&#xff0c;数据链路层报文头&#xff08;数据链路层&#xff09;&#xff0c;ip层头&#xff08;网络层&#xff09;&#xff0c;udp头&…

win7利用映射网络驱动器功能管理网站FTP空间

win7利用映射网络驱动器功能管理网站FTP空间 首先打开windows资源管理器&#xff0c;最菜单栏找到映射网络驱动器 弹出设置界面&#xff0c;我们选择最下面的“连接到可用于存储文档和图片的网站”&#xff0c;弹出向导&#xff0c;选择下一步 选中“选择自定义网络位置”&…

网站API自动化测试利器——Postman

转自&#xff1a;http://bayescafe.com/tools/use-postman-to-test-api-automatically.html 如有侵犯&#xff0c;请来信oikenqq.com 自从开始做API开发之后&#xff0c;我就在寻找合适的API测试工具。一开始不是很想用Chrome扩展&#xff0c;用的WizTools的工具&#xff0c;后…

用 Certbot 一键升级你的网站为 Https

转载自&#xff1a;https://www.v2ex.com/t/383032 如有侵犯&#xff0c;请来信&#xff1a;oikenqq.com 原文&#xff1a;(用 Certbot 一键升级你的网站为 Https)[https://lufficc.com/blog/upgrade-to-https-with-certbot] 小站以前采用的是 StartSSL 的 https 证书&#xf…

使用Chrome下载网站视频

引论 在现实生活中&#xff0c;我们经常需要下载一些视频&#xff0c;但是这些视频又没有提供下载的链接或者需要下载客户端。怎么办呢&#xff1f;使用Chrome可以下载大部分网站上的视频&#xff0c;让我们一起学习一下 流程 使用Chrome打开需要下载视频的网站按F12&#xf…

图片背景网页在网站建设中的运用

网页背景是网站建设中体现风格的一种方式&#xff0c;如果背景建设得好&#xff0c;那么对用户体验则有一定的帮助&#xff0c;现在的网站越来越多的人倾向于选择图片背景的网站设计&#xff0c;让网站看起来显得整体&#xff0c;增加吸引力。 由于现在的用户使用的PC端显示屏大…

如何真正的从细节上节省网站用户的时间

我们的用户是很珍惜时间的&#xff0c;我们也不应该随意浪费。在每个项目中都问自己两个问题&#xff1a;“我们是在消耗用户的时间来节省自己的时间吗&#xff1f;”“在这里要如何节省用户的时间&#xff1f;”在西方社会中&#xff0c;什么是最宝贵的财富&#xff1f;钱&…

瞬间抓住眼球!24个特色人像背景的全屏网站设计

人物肖像对视觉引导天然有不可思议的力量&#xff0c;现在全屏网页正在风头&#xff0c;有聪明的设计师已经将这种技巧运用上去了&#xff0c;效果超级赞&#xff01;今天分享一组高质量的特色人像背景全屏网站&#xff0c;不仅设计有范&#xff0c;模特也好看&#xff0c;绝对…