新闻详情

IIS优化网站性能

发表时间:2019-09-04 18:54

  本文将引见一些方法用于优化ASP.NET网站功用,这些方法都是不需求修改依次代码的。 它们主要分为二个方面: 1. 应用ASP.NET自身的扩大性停止优化。 2. <b>巩义建网站</b>优化IIS设置。

  用缓存来优化网站功用的方法,估计是无人不知的。ASP.NET供给了HttpRuntime.Cache对象来缓存数据,也供给了OutputCache指令来缓存全部页面输入。 固然OutputCache指令应用起来更便利,也有十分好的后果, 不外,它需求我们在那些页面中添加如许一个指令。

  关于设置过OutputCache的页面来讲,浏览器在收到这类页面的照顾后,会将页面照顾内容缓存起来。 只需在指定的缓存时间以内,且用户没有强制刷新的操作,那么就基本不会再次恳求效劳端, 而关于来自其它的浏览器提议的恳求,假设缓存页已生成,那么便可以直接从缓存中照顾恳求,加快照顾速度。 因此,OutputCache指令关于功用优化来讲,是很成心义的(除非一切页面页面都在频繁更新)。

  在网站的优化阶段,我们可以用Fiddler之类的对象找出,给它们设置OutputCache, 然则,依照传统的开辟流程,我们需求针对每个页面文件履行以下操作: 1. 签出页面文件。 2. 添加OutputCache指令。 3. 从新宣布页面。 4. 签入文件(假设碰到多分支并行,还能够需求吞并操作)。 以上这些源代码办理制度会让一个复杂的工作复杂化,那么,有没一种更复杂的方法能处理这个后果呢?

  接上去,本文将引见一种方法,它应用ASP.NET自身的扩大性,以设备文件的方法为页面设置OutputCache参数。 设备文件其它就是一个XML文件,内容以下:

  看了这段设备,我想您应当也能猜到它能有甚么感化。

  每行设备参数为一个页面指定OutputCache所需求的参数, 示例文件为了复杂只应用二个参数,其它可以支撑的参数请参考OutputCache指令。

  为了能让这个设备文件有效,需求在web.config中设备以下内容(实用于IIS7):

  在这里,我注册了一个HttpModule,它的全部代码以下:

      ConfigManager类用于读取设备文件,并启用了文件依附技巧,当设备文件更新后,依次会主动从新加载:

  有了AutoSetOutputCacheModule,我们便可以直接应用设备文件为页面设置OutputCache参数,而不需求修改任何页面,是否是很轻易应用?

  说明:MyMVC框架已支撑这类功用,一切相干的可以从MyMVC框架的源码中获得。

  建议:关于一些很少修改的页面,缓存页是一种很有效的优化方法。

  每个网站都邑有一些资本文件(图片,JS,CSS),这些文件相干于ASPX页面来讲, <b>库客收集公司</b> 它们的输入内容极有能够在一段长时间以内不会有变更, 而IIS在照顾这类资本文件时不会生成Cache-Control照顾头。 在这类状况下,浏览器或许会缓存它们,或许会再次提议恳求(比如重启后),总之就是缓存行动不受控制且缓存时间不够持久。

  有没有想过可以把它们在浏览器中持久缓存起来呢?

  为了通知浏览器将这些文件持久缓存起来,增加一些成心义的恳求(提高页面出现速度),我们可以在IIS中启用内容过时, 如许设置后,IIS就可以生成Cache-Control照顾头,明确通知浏览器将文件缓存多久。

  在IIS6中,这个参数很好找到:

  然则,在IIS7中,这个参数不轻易被发明,需求以下操作才华找到: 选择网站(或许网站子目次)节点,双击【HTTP照顾标头】

  再点击左边的【设置经常使用标头】链接,

  此时将会显示:

  说明:

  留心:假设您在IIS7中针对某个子目次或许文件设置【启用内容过时】,前面的对话框看起来是千篇一律的, 然则,在IIS6中,我们可以清晰地从对话框的题目栏中知道我们在做甚么:

  有时真认为IIS7的界面在退步!

  最后我想说一句:

  说到这里能够有人会想:这个过不时间我该设置多久呢? 十分钟,2个小时,一天,照样一个月? 在我看来,这个时间越久越好。 能够有人又会说了:万一我要升级某个JS文件如何办,时间设置久了,用户如何更新呢? 假设你问我这个后果,我也只能说是你的代码不公道(究竟你处理不了升级后果),想知道启事的话,请继续浏览。

  关于一些范围不大年夜的网站来讲,平日会将资本文件与依次文件一同安排到一个网站中。 这时候能够会采取下面的方法来援用JS或许CSS文件:

  在这类状况下,假设应用了前面所说的【启用内容过时】方法,那么当有JS,CSS文件需求升级时, 因为浏览器的缓存还没有过时,所以就不会恳求效劳器,此时会应用已缓存的版本, 因此能够会出现各类奇异的BUG

  关于前面谈到的BUG,我认为根源在于援用JS,CSS文件的方法有缺点, 那种方法完整没有思考到版本升级后果, 准确的方法有二种: 1. 给文件名添加版本号,像jquery那样,每个版本一个文件(jquery-1.4.4.min.js)。 2. 在URL前面添加一个版本号,让本来的URL掉效。

  第一种方法因为每次升级都发生了一个新文件,所以不存在缓存后果,然则,保护一大年夜堆文件的成本能够会比拟大年夜, 因此我建议采取第二种方法来处理。

  在MyMVC的示例代码中,我应用了下面的方法来援用这些资本文件:

  在页面运转时,会发生以下的输入结果:

  这二个对象方法的实现代码以下(在MyMVC的示例代码中):

  下面这类获得文件版本号的方法,是一种比拟复杂的处理计划。 每个援用的中央在生成HTML代码时,都邑访问文件的最后修改时间,这会给磁盘带来一点读的开支, 假设您担心这类完成方法能够会给功用带来影响,那么也能够添加一个设备文件的方法来处理(请自行完成), 例如以下结构:

  假设您认为这类设备文件需求手工保护,不够主动化,还可以采取依次的方法主动在运转时保护一个列表, 总之,直接援用资本文件的方法是一种直接耦合,会给文件升级带来费事, 我们可以经过一个外部方法来解开这个直接耦合(给FileVersion添加一个属性还还可以将外部地址改成一个CDN地址)。

  压缩照顾结果也是经常使用的网站优化方法,因为现在的浏览器都已支撑压缩功用, 因此,假设在效劳端能压缩照顾结果,关于网速较慢的用户来讲,会增加很多收集传输时间,终究的体验就是网页显示速度变快了!

      IIS6固然供给压缩的设置界面,然则设备是基于效劳器级其余:

  留心:这里的【应用依次文件】不包罗aspx,假设需求压缩aspx的照顾, 需求手工修改x:\WINDOWS\system32\inetsrv\MetaBase.xml文件(参考加大年夜字号局部):

  说明:要修改MetaBase.xml,需求中断IIS Admin Service效劳。

  在IIS7中,我们可以在效劳器级别设备压缩参数:

  然后在每个网站中开启或许封闭压缩功用:

  说明:IIS7中曾经不再应用MetaBase.xml,所以我们找不到IIS6的那些设置了。IIS7压缩的过滤条件不再针对扩大名,而是采取了mimeType规矩(保管在applicationHost.config)。 依据IIS7的压缩规矩,当我们启用静态压缩后,会压缩aspx的照顾结果。

  二种压缩方法的差异: 1. 静态内容压缩:当效劳器在第一次照顾某个静态文件时,会生成一个压缩后的结果,并保管到磁盘中,以便重用。 2. 静态内容压缩:【每次】在照顾客户端之前,压缩照顾结果,在内存中完成,因此会给CPU带来一些担当。

  留心:要不要【启用静态内容压缩】这个参数,需求评价效劳器的CPU可否能以接受(不美观察义务办理器或许检查功用计数器)。

  对一个网站来讲,ASP.NET供给的<b>巩义SEO优化</b> 有些HttpMoudle能够其实不是需求的, 然则,。 比如 我 会禁用下面这些HttpMoudle:

  关于应用Forms身份认证的网站的来讲,下面这些HttpModule也是可以禁用的:

  优化ASP.NET网站是一个大年夜的话题,除博客中引见的这些方法以外,还有以下方法也是可以参考的: 1. 升级效劳器硬件设备。 2. 应用Windows Server 2008以上版本操作系统(收集功用比2003要好)。 3. 优化操作系统设备(例如禁用不需求的效劳)。 4. 禁用调试形式。 5. 网站应用公用应用依次池。


库客建站平台