借助HttpCombiner让你的网站加速

news/2024/5/9 16:29:43/文章来源:https://blog.csdn.net/weixin_34370347/article/details/86284573

借助HttpCombiner让你的网站加速

     上一篇 < 利用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文件完全加载完成之前是不能很好的渲染你的页面的。因此越多的延迟让你的页面载入越慢。

 

延迟导致多大的影响

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

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

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

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

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中的设置如下: 

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文件 .

下面就是Default.aspx的内容:

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

该处理程序如何工作:

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

该处理程序带来的好处:

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

如何让HttpHandler工作

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

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

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

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

 

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

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

response.Flush();
if (response.IsClientConnected)
response.OutputStream.Write(bytes, 0, bytes.Length);
response.End();

 

如何使用该文件:

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

结尾

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

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

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

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

相关文章

Firefox浏览器查看SEO数据最好用的插件

虽然我觉得我的firefox浏览器是越来越笨重&#xff0c;但是一些必不可少的插件我还是装了的。今天我给大家推荐SearchStatus插件&#xff0c;可以说它是Firefox 上最优秀的SEO 插件。 安装地址&#xff1a;SearchStatus 安装后&#xff0c;工具条默认显示在右下角的浏览器状态栏…

网站结构优化的基本方法

网站结构优化的基本方法网站结构优化就是对网站页面的存储方式&#xff08;物理结构&#xff09;、内部链接关系&#xff08;逻辑结构&#xff09;进行合理的调整&#xff0c;以减少网站的目录层级&#xff0c;优化普通页面与重要页面之间的链接深度&#xff0c;增加重要页面的…

经典伤感配乐鉴听-人生的旅途|最佳音乐推荐网站-MP3火力网|音乐试听|唱片导购|

导读&#xff1a; 作者&#xff1a;MP3火力网 发布时间&#xff1a;2007-06-15 09:52:33 来源&#xff1a;MP3火力网(注:如需停止部份页面音乐播放,请按一下浏览器停止(X)按键.重播按F5刷新页面) 唱片推荐 经典伤感配乐鉴听&#xff0d;人生的旅途推荐音乐:推荐指数 8.8(最高…

LNMP禁止输入IP直接访问网站的设置

查看原文&#xff1a;http://www.hellonet8.com/1131.html 从博主刚开始接触建站到现在已经1年多了&#xff0c;期间用过免费空间和虚拟主机&#xff0c;最后也最终转战到VPS上了。总体感觉虚拟主机性能和VPS的差距还是比较大的&#xff0c;而且VPS自主性比虚拟主机多很多&…

个人第一个在线看电影电视网站

查看原文&#xff1a;http://www.hellonet8.com/1245.html 今天章郎虫把我的一个在线电影电视网站给正式上线了。这个网站是纯采集的&#xff0c;所以基本没用多少时间。电影站的名字也是随便写的&#xff0c;叫“ZJ影视资源网”&#xff0c;网址是http://video.chekiang.info/…

18个优秀的在线图片编辑服务网站 | 可能吧

导读&#xff1a; 说起编辑图片&#xff0c;可能大多数人都会马上想起强大的Photoshop。事实上&#xff0c;除了购买或下载盗版的PS之外&#xff0c;你还可以使用很多优秀在线图片编辑服务&#xff0c;这些网站大多数都是免费的。对于大部分的人来说&#xff0c;它们提供的功能…

PHP-COOKIE保存网站访问量

2019独角兽企业重金招聘Python工程师标准>>> <?php global $count; $count1; if(!isset($_COOKIE["visittime"])){ setcookie("visittime",date("y-m-d H:i:s")); setcookie("visitcount",1); echo "欢迎你第一次…

重新设计的网站的14个例子

网站重新设计更为复杂&#xff0c;因为会碰到原设计的设计规范&#xff0c;这是不可避免的。在不影响功能和网站内容的情况下&#xff0c;设计人员需要阐述一个新的观点或者给它一个新的外观。虽然重新设计一个网站是一个具有挑战性的任务&#xff0c;但是这对爱好设计师工作的…

Nginx屏蔽个别User-Agent蜘蛛访问网站的方法

查看原文&#xff1a;http://www.sijitao.net/1930.html 对于做国内站的我来说&#xff0c;我不希望国外蜘蛛来访问我的网站&#xff0c;特别是个别垃圾蜘蛛&#xff0c;它们访问特别频繁。这些垃圾流量多了之后&#xff0c;严重浪费服务器的带宽和资源。通过判断user agent&am…

使用七牛云解决gravatar头像拖慢wordpress网站打开速度的问题

查看原文&#xff1a;http://www.sijitao.net/1968.html 之前博主使用的是多说镜像来解决gravatar头像打不开和拖慢网站打开速度的问题&#xff0c;但运行一段时间后发现多说头像不怎么稳定&#xff0c;有时候头像还是打不开。所以这次试用七牛云存储来解决&#xff0c;整体思路…

Zabbix 增加HTTPS网站SSL证书过期时间监控

原文地址&#xff1a;https://zhangnq.com/3106.html 随着HTTPS网站的普及&#xff0c;SSL证书的过期时间需要重点关注。如果使用lets encrypt的免费证书&#xff0c;可以配置自动更新程序。不过我觉得最好还是做下监控&#xff0c;因为有时候自动续期可能会出现问题。zabbix实…

Nginx和PHP网站防CC攻击解决方案步骤举例

昨天接到客户服务器告警,看到一个nginx+php网站正在遭受CC攻击,导致服务器复制居高不下,正常业务访问大多数时候出现502错误。 CC攻击是 DDOS(分布式拒绝服务) 的一种,DDoS是针对IP的攻击,而CC攻击的是网页。CC攻击来的IP都是真实的,分散的。数据包都是正常的数据包,攻…

2011年国外最受欢迎的15个Torrent网站

2019独角兽企业重金招聘Python工程师标准>>> 面向全球电子商务知识库网站eBizMBA公布了2011年国外最受欢迎的15个Torrent网站&#xff1a; 1 ISOHunt (http://www.isohunt.com) eBizMBA排名第392&#xff0c;估计每月访客12000000人&#xff0c;竞争力排名第713&…

使用Bootstrap 3开发响应式网站实践01,前期准备、导航区域等

“使用Bootstrap 3开发响应式网站实践”系列&#xff0c;将使用Bootstrap 3.2制作一个自适应网站&#xff0c;无论是在电脑、平板&#xff0c;还是手机上&#xff0c;都呈现比较好的效果。在电脑浏览器上的最终效果如下&#xff1a; 在手机上的呈现效果如下&#xff1a; 本篇主…

一些网站 http://ychun.w.googlepages.com/pages

大家都可以说话的地方&#xff1a; 电子产品世界&#xff1a;http://bbs.edw.com.cn nios论坛&#xff1a;http://www.niosforum.com 嵌入式论坛&#xff1a;http://www.anywlan.com/tony/bbs PLD论坛&#xff1a;http://www.pld.com.cn/bbs/index.asp EDAboard&#xff1a;htt…

国外网站设计:25个小众的电子商务网站案例

对于电子商务网站来说&#xff0c;网站的设计和布局的可用性对于产品的销售会产生巨大的影响&#xff0c;另外就是产品带给访客的第一印象也很重要。一个设计良好的电子商务网站会为用户提供一个更愉快的体验&#xff0c;并让他们更容易浏览&#xff0c;搜索&#xff0c;并完成…

微软特邀讲师 徐雷 为受邀为世界500强达丰集团讲授《微软ASP.NET MVC5企业网站开发课程》...

老徐FrankXuLei 非常荣幸受邀为微软大企业客户世界500强达丰集团&#xff08;广达电脑&#xff09;信息化部讲授《微软ASP.NET MVC5企业网站开发课程》缘分2005年在公司篮球队和达丰集团打过友谊赛达丰集团全球第一大笔记本电脑制造商。上海60000多人.技术人员非常客气.企业非常…

Azure公开发布: 基本网站等级, 虚拟网络动态路由网关与点对站, 虚拟网络增强功能...

收到来自Azure的邮件&#xff0c;中国地区的3个功能公开发布&#xff0c;其实在这之前我已经测试了相关功能&#xff0c;并且已经将v-net to v-net ***发布为博文。 以下为邮件内容&#xff1a; 1. Azure基本网站等级 标准网站等级的客户将可以获得更多增值服务。 基本网站等级…

细数国内13家热门在线教育网站平台

2019独角兽企业重金招聘Python工程师标准>>> 在打车软件大战硝烟渐散时&#xff0c;在线教育却现升温之势。2013年至今&#xff0c;不断有人扎身在线教育之中创业&#xff0c;也有不少互联网企业在这个领域投资布局&#xff0c;其中包括BAT这三大巨头&#xff0c;在…

wordpress地址(URL)设置的网站是网站后台的地址,站点地址(URL)设置的是网站前台的地址...

2019独角兽企业重金招聘Python工程师标准>>> wordpress地址&#xff08;URL&#xff09;设置的网站是网站后台的地址&#xff0c;站点地址&#xff08;URL&#xff09;设置的是网站前台的地址。 如果希望前后台域名都是顶级域名的地址&#xff0c;那么可以把上下两个…