不改动代码就能优化ASP管理制度

不修改代码就能优化ASP.NET网址质量的某些方式

翻阅目录

本文将介绍部分方法用于优化ASP.NET网址品质,那一个办法都以不须求修改程序代码的。
它们主要分为贰个地点:

  1. 运用ASP.NET本身的扩充性举行优化。
  2. 优化IIS设置。

 

配置OutputCache

用缓存来优化网址质量的章程,估算是家喻户晓的。
ASP.NET提供了HttpRuntime.Cache对象来缓存数据,也提供了OutputCache指令来缓存整个页面输出。
即使OutputCache指令使用起来更便宜,也有丰富好的意义,
可是,它须求我们在这么些页面中加上那样3个指令。

对此设置过OutputCache的页面来说,浏览器在接到那类页面包车型地铁响应后,会将页面响应内容缓存起来。
只要在钦赐的缓存时间之内,且用户未有强制刷新的操作,那么就根本不会另行伸手服务端,
而对于来自别的的浏览器发起的请求,借使缓存页已转移,那么就能够直接从缓存中一呼百应请求,加速响应速度。
由此,OutputCache指令对于品质优化来说,是很有意义的(除非全体页面页面都在延续更新)。

在网址的优化阶段,我们能够用Fiddler之类的工具找出某些剧情差不离不会变动的页面,给它们设置OutputCache,
然则,依照守旧的花费流程,大家须要针对各类页面文件进行以下操作:

  1. 签出页面文件。
  2. 添加OutputCache指令。
  3. 再也公布页面。
  4. 签入文件(若是碰着多分支并行,还恐怕要求统一操作)。
    上述那个源代码管理制度会让1个不难易行的事情复杂化,那么,有没一种更简便的办法能一蹴而就那几个题材吧?

接下去,本文将介绍壹种艺术,它选取ASP.NET本人的增添性,以布置文件的艺术为页面设置OutputCache参数。
配置文件其余就是多少个XML文件,内容如下:

<?xml version=”1.0″ encoding=”utf-8″?>

<OutputCache xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance

                        xmlns:xsd=”http://www.w3.org/2001/XMLSchema"&gt;

    <Settings>

        <Setting Duration=”3″ FilePath=”/Pages/a3.aspx”  />

        <Setting Duration=”10″ FilePath=”/Pages/a5.aspx”  />

    </Settings>

</OutputCache>

看了那段配置,作者想你应该也能猜到它能有如何效果。

每一行配置参数为多少个页面钦命OutputCache所须要的参数,
示例文件为了简单只行使二个参数,其余能够支撑的参数请参考OutputCache指令

为了能让这么些布局文件有效,须要在web.config中安排以下内容(适用于IIS七):

<system.webServer>

    <modules>

        <add name=”SetOutputCacheModule”
type=”WebSiteOptimize.SetOutputCacheModule, WebSiteOptimize” />

    </modules>

</system.webServer>

在此处,作者登记了三个HttpModule,它的全部代码如下:

public class SetOutputCacheModule : IHttpModule

{

    static SetOutputCacheModule()

    {

        // 加载配置文件

        string xmlFilePath = Path.Combine(HttpRuntime.AppDomainAppPath,
“OutputCache.config”);

        ConfigManager.LoadConfig(xmlFilePath);

    }

 

    public void Init(HttpApplication app)

    {

        app.PreRequestHandlerExecute += new
EventHandler(app_PreRequestHandlerExecute);

    }

 

    void app_PreRequestHandlerExecute(object sender, EventArgs e)

    {

        HttpApplication app = (HttpApplication)sender;

 

        Dictionary<string, OutputCacheSetting> settings =
ConfigManager.Settings;

        if( settings == null )

            throw new
ConfigurationErrorsException(“SetOutputCacheModule加载配置文件战败。”);

 

        // 达成格局:

        // 查找配置参数,借使找到相配的恳求,就设置OutputCache

        OutputCacheSetting setting = null;

        if( settings.TryGetValue(app.Request.FilePath, out setting) ) {

            setting.SetResponseCache(app.Context);

        }

    }

ConfigManager类用于读取配置文件,并启用了文本重视技术,当配置文件更新后,程序会自行重新加载:
                       😉

有了AutoSetOutputCacheModule,大家就足以一向运用安顿文件为页面设置OutputCache参数,而不供给修改任何页面,是还是不是很简单采用?

说明:MyMVC框架已帮助那种效益,全体有关的能够从MyMVC框架的源码中拿走。

建议:对于某些很少改变的页面,缓存页是壹种很实用的优化措施。

重返顶部

启用内容过期

每个网址都会有一部分能源文件(图片,JS,CSS),那个文件相对于ASPX页面来说,
它们的输出内容极有希望在一段短期之内不会有浮动,
而IIS在响应那类财富文件时不会生成Cache-Control响应头。
在那种气象下,浏览器可能会缓存它们,恐怕会另行发起呼吁(比如重启后),由此可知正是缓存行为不受控制且缓存时间相当的短久。

有未有想过能够把它们在浏览器中长久缓存起来吧?

为了告知浏览器将那些文件长久缓存起来,减弱部分虚幻的恳求(提升页面展现速度),我们能够在IIS中启用内容过期,
那样设置后,IIS就能生成Cache-Control响应头,显明告知浏览器将文件缓存多长时间。

在IIS陆中,那几个参数很好找到:

可是,在IIS7中,这么些参数不易于被察觉,需求以下操作才能找到:
分选网址(抑或网址子目录)节点,双击【HTTP响应标头】

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

那儿将会显得:

说明:【启用内容过期】那几个设置能够依照整个网址,也能够针对子目录,也许三个现实的文书。

注意:借使你在IIS七中针对某些子目录可能文件设置【启用内容过期】,后面包车型大巴对话框看起来是一模壹样的,
只是,在IIS陆中,大家得以知道地从对话框的标题栏中了然大家在做什么:

有时真感觉IIS7的界面在落后!

末段笔者想说一句:能够直接为总体网站启用内容过期,ASPX页面是不会被缓存的!

提及那里或者有人会想:那一个过期光阴自个儿该装置多长期呢?
拾分钟,1个小时,一天,照旧3个月?
以作者之见,这些日子越久越好。
可能有人又会说了:万1作者要升迁有个别JS文件怎么办,时间设置久了,用户怎么创新呢?
只要你问作者那个标题,小编也只可以算得你的代码不客观(毕竟你消除不了升级难点),想知道原委来说,请继续阅读。

回到顶部

化解能源文件升级难点

对此壹些层面相当小的网址以来,经常会将能源文件与程序文件一起安顿到三个网站中。
那时或许会利用下边包车型客车措施来引用JS恐怕CSS文件:

<link type=”text/css” href=”aaaa.css” rel=”Stylesheet” />

<script type=”text/javascript” src=”bbb.js”></script>

在这种意况下,假诺使用了前方所说的【启用内容过期】方法,那么当有JS,CSS文件需求提高时,
由于浏览器的缓存还从未过期,所以就不会呈请服务器,此时会利用已缓存的本子,
因而可能会出现种种奇怪的BUG

对于日前聊到的BUG,作者觉着根源在于引用JS,CSS文件的办法有欠缺,
那种方式完全未有考虑到版本升级难点, 正确的主意有三种:
一.
给文件名添加版本号,像jquery那样,每一种版本3个文书(jquery-一.四.四.min.js)。

  1. 管理制度,在U奥德赛L前边添加贰个本子号,让原先的U智跑L失效。

先是种方法由于每次升级都产生了三个新文件,所以不设有缓存难点,不过,维护一大堆文件的工本恐怕会比较大,
因而作者提出使用第两种方法来缓解。

MyMVC的以身作则代码中,作者利用了上边包车型大巴章程来引用这么些财富文件:

<%= HtmlExtension.RefCssFileHtml(“/css/StyleSheet.css”)%>

<%= HtmlExtension.RefJsFileHtml(“/js/MyPage/fish.js”)%>

在页面运营时,会时有产生如下的输出结果:

<link type=”text/css” rel=”Stylesheet”
href=”/css/StyleSheet.css?_t=634642185820000000″ />

<script type=”text/javascript”
src=”/js/MyPage/fish.js?_t=634642154020000000″></script>

那个工具方法的兑现代码如下(在MyMVC的示范代码中):

地点这种获取文件版本号的方法,是1种相比不难的解决方案。
每一种引用的地点在生成HTML代码时,都会访问文件的末尾修改时间,那会给磁盘带来一点读的开发,
假若您担心那种实现形式大概会给质量带来影响,那么也足以追加一个布置文件的章程来解决(请自行达成),
例如以下结构:

<?xml version=”1.0″ encoding=”utf-8″?>

<ArrayOfFileVersion
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance

                    xmlns:xsd=”http://www.w3.org/2001/XMLSchema"&gt;

    <FileVersion FilePath=”/js/JScript.js” Version=”255324″ />

    <FileVersion FilePath=”/css/StyleSheet.css” Version=”2324235″
/>

</ArrayOfFileVersion>

假定您觉得那种布局文件需求手工维护,不够自动化,还足以采纳程序的措施自行在运行时爱惜八个列表,
总而言之,间接引用财富文件的不二等秘书籍是1种直接耦合,会给文件升级带来麻烦,
我们能够通过多少个外表方法来解开这几个一直耦合(给FileVersion扩展2个属性还还是能将里面地址改成2个CDN地址)。

重回顶部

启用压缩

裁减响应结果也是常用的网站优化措施,由于未来的浏览器都已援助压缩成效,
因而,借使在服务端能减小响应结果,对于网速较慢的用户来说,会降价扣过多互联网传输时间,最后的体验正是网页呈现速度变快了!

IIS陆就算提供压缩的安装界面,可是配置是依照服务器级别的:

只顾:那里的【应用程序文件】不包括aspx,假使需求压缩aspx的响应,
须要手工业修改x:\WINDOWS\system32\inetsrv\MetaBase.xml文件(参考加大字号部分):

注脚:要修改MetaBase.xml,须求结束IIS Admin Service服务。

在IIS七中,大家得以在服务器级别配备压缩参数:

接下来在各类网址中拉开或然关闭压缩功效:

注脚:IIS柒中曾经不再动用MetaBase.xml,所以大家找不到IIS六的那多少个设置了。
IIS7减小的过滤条件不再针对增添名,而是选拔了mimeType规则(保存在applicationHost.config)。
依照IIS柒的压缩规则,当大家启用动态压缩后,会压缩aspx的响应结果。

二种压缩方法的异样:
1.
静态内容减弱:当服务器在第2遍响应某些静态文件时,会转变多个收缩后的结果,并保留到磁盘中,以便重用。
二.
动态内容收缩:【每一回】在响应客户端在此以前,压缩响应结果,在内部存款和储蓄器中完结,由此会给CPU带来壹些担当。

专注:要不要【启用动态内容减弱】这几个参数,须求评估服务器的CPU是还是不是能以接受(观看职责管理器恐怕查看质量计数器)。

回来顶部

删去无用的HttpModule

对三个网址来说,ASP.NET提供的略微HttpMoudle只怕并不是急需的,
但是,只要你不去手工业禁止使用它们,它们其实会一贯运转
比如 会禁止使用下面这个HttpMoudle:

<httpModules>

    <remove name=”Session”/>

    <remove name=”RoleManager”/>

    <remove name=”PassportAuthentication”/>

    <remove name=”Profile”/>

    <remove name=”ServiceModel”/>

</httpModules>

对此利用Forms身份注解的网址的来说,上边那个HttpModule也是能够禁止使用的:

<httpModules>

    <remove name=”WindowsAuthentication”/>

    <remove name=”FileAuthorization”/>

</httpModules>

回去顶部

任何优化增选

优化ASP.NET网址是二个大的话题,除了博客中牵线的那些点子之外,还有以下措施也是足以参见的:

  1. 提高服务器硬件配置。
  2. 运用Windows Server 二零零六上述版本操作系统(互连网品质比200三要好)。
  3. 优化操作系统配置(例如禁用不须求的劳动)。
  4. 剥夺调节和测试形式。
  5. 网址使用专用应用程序池。

发表评论

电子邮件地址不会被公开。 必填项已用*标注