95992828九五至尊2

九五至尊iiNET网站质量的部分方法,net网站优化

三月 28th, 2019  |  九五至尊ii

 

开卷目录

阅读目录

本文将介绍部分办法用于优化ASP.NET网站品质,那些措施都以不要求修改程序代码的。
它们首要分为3个地点: 1. 行使ASP.NET自个儿的扩展性实行优化。 2.
优化IIS设置。

本文将介绍一些措施用于优化ASP.NET网站质量,这个形式都以不供给修改程序代码的。
它们首要分为二个地点: 1. 运用ASP.NET本身的增添性进行优化。 2.
优化IIS设置。

回去顶部

回到顶部

配置OutputCache

用缓存来优化网站品质的主意,估摸是举世知名的。ASP.NET提供了HttpRuntime.Cache对象来缓存数据,也提供了
OutputCache指令来缓存整个页面输出。
纵然OutputCache指令使用起来更便利,也有特别好的效率,
可是,它须要我们在那些页面中添加那样三个下令。

对此设置过OutputCache的页面来说,浏览器在接受那类页面包车型客车响应后,会将页面响应内容缓存起来。
只要在钦命的缓存时间之内,且用户没有强制刷新的操作,那么就根本不会重复伸手服务端,
而对于来自其余的浏览器发起的呼吁,借使缓存页已转移,那么就足以一向从缓存中一呼百应请求,加速响应速度。
由此,OutputCache指令对于品质优化来说,是很有含义的(除非全体页面页面都在频仍更新)。

在网站的优化阶段,大家能够用Fiddler之类的工具找出一对剧情大约不会改变的页面,给它们设置OutputCache,
不过,遵照古板的付出流程,我们须要针对种种页面文件执行以下操作: 1.
签出页面文件。 2. 添加OutputCache指令。 3. 重新发布页面。 4.
签入文件(假若碰着多分支并行,还可能需求联合操作)。
如上那几个源代码管理制度会让四个简易的事体复杂化,那么,有没一种更简短的法门能解决那几个题材呢?

接下去,本文将介绍一种办法,它应用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">
    <Settings>
        <Setting Duration="3" FilePath="/Pages/a3.aspx"  />
        <Setting Duration="10" FilePath="/Pages/a5.aspx"  />
    </Settings>
</OutputCache>

看了那段配置,小编想你应该也能猜到它能有哪些遵从。

每一行配置参数为1个页面钦定OutputCache所须要的参数,
示例文件为了简单只使用3个参数,别的能够支撑的参数请参考OutputCache指令

为了能让这一个布局文件有效,必要在web.config中配置以下内容(适用于IIS7):

<system.webServer>
    <modules>
        <add name="SetOutputCacheModule" type="WebSiteOptimize.SetOutputCacheModule, WebSiteOptimize" />
    </modules>
</system.webServer>

在那里,小编登记了3个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类用于读取配置文件,并启用了文本重视技术,当配置文件更新后,程序会自行重新加载:九五至尊ii 1

internal static class ConfigManager
{
    private static readonly string CacheKey = Guid.NewGuid().ToString();

    private static Exception s_loadConfigException;
    private static Dictionary<string, OutputCacheSetting> s_settings;

    public static Dictionary<string, OutputCacheSetting> Settings
    {
        get{
            Exception exceptin = s_loadConfigException;
            if( exceptin != null )
                throw exceptin;

            return s_settings;
        }
    }

    public static void LoadConfig(string xmlFilePath)
    {
        Dictionary<string, OutputCacheSetting> dict = null;

        try {
            OutputCacheConfig config = XmlHelper.XmlDeserializeFromFile<OutputCacheConfig>(xmlFilePath, Encoding.UTF8);
            dict = config.Settings.ToDictionary(x => x.FilePath, StringComparer.OrdinalIgnoreCase);
        }
        catch( Exception ex ) {
            s_loadConfigException = new System.Configuration.ConfigurationException(
                "初始化SetOutputCacheModule时发生异常,请检查" + xmlFilePath + "文件是否配置正确。", ex);
        }


        if( dict != null ) {
            // 注册缓存移除通知,以便在用户修改了配置文件后自动重新加载。

            // 参考:细说 ASP.NET Cache 及其高级用法
            //          http://www.cnblogs.com/fish-li/archive/2011/12/27/2304063.html
            CacheDependency dep = new CacheDependency(xmlFilePath);
            HttpRuntime.Cache.Insert(CacheKey, xmlFilePath, dep,
                Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.NotRemovable, CacheRemovedCallback);
        }

        s_settings = dict;
    }


    private static void CacheRemovedCallback(string key, object value, CacheItemRemovedReason reason)
    {
        string xmlFilePath = (string)value;

        // 由于事件发生时,文件可能还没有完全关闭,所以只好让程序稍等。
        System.Threading.Thread.Sleep(3000);

        // 重新加载配置文件
        LoadConfig(xmlFilePath);
    }
}

有了AutoSetOutputCacheModule,大家就能够直接使用铺排文件为页面设置OutputCache参数,而不须求修改任何页面,是还是不是很不难采用?

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

建议:对于部分很少改变的页面,缓存页是一种很管用的优化措施。

回来顶部

配置OutputCache

用缓存来优化网站质量的方法,推测是举世知名的。
ASP.NET提供了HttpRuntime.Cache对象来缓存数据,也提供了OutputCache指令来缓存整个页面输出。
尽管OutputCache指令使用起来更有益于,也有非常好的成效,
不过,它供给大家在那些页面中加上那样二个命令。

对此设置过OutputCache的页面来说,浏览器在收受那类页面包车型大巴响应后,会将页面响应内容缓存起来。
只要在钦定的缓存时间之内,且用户并未强制刷新的操作,那么就向来不会重新呼吁服务端,
而对于来自别的的浏览器发起的呼吁,固然缓存页已变更,那么就能够直接从缓存中一呼百应请求,加速响应速度。
因而,OutputCache指令对于品质优化来说,是很有意义的(除非全部页面页面都在频仍更新)。

在网站的优化阶段,大家得以用Fiddler之类的工具找出某些故事情节大概不会转移的页面,给它们设置OutputCache,
但是,遵照古板的支付流程,大家须要针对各类页面文件执行以下操作: 1.
签出页面文件。 2. 添加OutputCache指令。 3. 重新发布页面。 4.
签入文件(假设碰着多分支并行,还可能须求统一操作)。
如上那些源代码管理制度会让一个总结的工作复杂化,那么,有没一种更简便易行的方式能化解那几个题材吧?

接下去,本文将介绍一种艺术,它选用ASP.NET自个儿的扩展性,以布置文件的法门为页面设置OutputCache参数。
配置文件别的就是3个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">
    <Settings>
        <Setting Duration="3" FilePath="/Pages/a3.aspx"  />
        <Setting Duration="10" FilePath="/Pages/a5.aspx"  />
    </Settings>
</OutputCache>

看了那段配置,小编想你应该也能猜到它能有怎么样意义。

每一行配置参数为三个页面内定OutputCache所须要的参数,
示例文件为了简单只使用一个参数,别的能够补助的参数请参见OutputCache指令

为了能让这几个布局文件有效,须要在web.config中布局以下内容(适用于IIS7):

<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类用于读取配置文件,并启用了文件正视技术,当配置文件更新后,程序会自行重新加载:
九五至尊ii 2

internal static class ConfigManager
{
    private static readonly string CacheKey = Guid.NewGuid().ToString();

    private static Exception s_loadConfigException;
    private static Dictionary<string, OutputCacheSetting> s_settings;

    public static Dictionary<string, OutputCacheSetting> Settings
    {
        get{
            Exception exceptin = s_loadConfigException;
            if( exceptin != null )
                throw exceptin;

            return s_settings;
        }
    }

    public static void LoadConfig(string xmlFilePath)
    {
        Dictionary<string, OutputCacheSetting> dict = null;

        try {
            OutputCacheConfig config = XmlHelper.XmlDeserializeFromFile<OutputCacheConfig>(xmlFilePath, Encoding.UTF8);
            dict = config.Settings.ToDictionary(x => x.FilePath, StringComparer.OrdinalIgnoreCase);
        }
        catch( Exception ex ) {
            s_loadConfigException = new System.Configuration.ConfigurationException(
                "初始化SetOutputCacheModule时发生异常,请检查" + xmlFilePath + "文件是否配置正确。", ex);
        }


        if( dict != null ) {
            // 注册缓存移除通知,以便在用户修改了配置文件后自动重新加载。

            // 参考:细说 ASP.NET Cache 及其高级用法
            //          http://www.cnblogs.com/fish-li/archive/2011/12/27/2304063.html
            CacheDependency dep = new CacheDependency(xmlFilePath);
            HttpRuntime.Cache.Insert(CacheKey, xmlFilePath, dep,
                Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.NotRemovable, CacheRemovedCallback);
        }

        s_settings = dict;
    }


    private static void CacheRemovedCallback(string key, object value, CacheItemRemovedReason reason)
    {
        string xmlFilePath = (string)value;

        // 由于事件发生时,文件可能还没有完全关闭,所以只好让程序稍等。
        System.Threading.Thread.Sleep(3000);

        // 重新加载配置文件
        LoadConfig(xmlFilePath);
    }
}

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

说明:MyMVC框架已协助这种作用,全体相关的能够从MyMVC框架的源码中获得。

建议:对于部分很少改变的页面,缓存页是一种很实惠的优化措施。

再次来到顶部

启用内容过期

各种网站都会有一部分能源文件(图片,JS,CSS),那些文件相对于ASPX页面来说,
它们的输出内容极有恐怕在一段短时间之内不会有转变,
而IIS在响应那类能源文件时不会生成Cache-Control响应头。
在那种情形下,浏览器或然会缓存它们,恐怕会重复发起呼吁(比如重启后),综上可得正是缓存行为不受控制且缓存时间相当的短久。

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

为了告诉浏览器将那么些文件长久缓存起来,缩小一些浮泛的伸手(提高页面展现速度),大家能够在IIS中启用内容过期,
那样设置后,IIS就能生成Cache-Control响应头,鲜明告诉浏览器将文件缓存多长期。

在IIS6中,那些参数很好找到:
九五至尊ii 3

唯独,在IIS7中,那一个参数不简单被发觉,须求以下操作才能找到:
选择网站(或然网站子目录)节点,双击【HTTP响应标头】
九五至尊ii 4

再点击右侧的【设置常用标头】链接,
九五至尊ii 5

那会儿将会展现: 九五至尊ii 6

说明:九五至尊ii,【启用内容过期】那个装置能够依据整个网站,也能够针对子目录,可能三个有血有肉的文件。

注意:若果你在IIS7中针对有个别子目录可能文件设置【启用内容过期】,前边的对话框看起来是一模一样的,
可是,在IIS6中,我们得以精通地从对话框的标题栏中级知识分子道我们在做怎么着:
九五至尊ii 7

奇迹真觉得IIS7的界面在落后!

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

说到此处只怕有人会想:那一个过期时光自身该装置多长期呢?
十秒钟,三个钟头,一天,照旧3个月? 在作者眼里,这几个日子越久越好。
或许有人又会说了:万一作者要升级有些JS文件如何做,时间设置久了,用户怎么立异呢?
假使您问小编那么些标题,小编也只可以算得你的代码不创造(毕竟你化解不了升级难点),想知道原因来说,请继续读书。

回到顶部

启用内容过期

各类网站都会有局地财富文件(图片,JS,CSS),那一个文件相对于ASPX页面来说,
它们的输出内容极有也许在一段长时间之内不会有转变,
而IIS在响应那类财富文件时不会生成Cache-Control响应头。
在那种景色下,浏览器只怕会缓存它们,可能会再也发起呼吁(比如重启后),总之正是缓存行为不受控制且缓存时间相当短久。

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

为了告诉浏览器将那个文件长久缓存起来,减弱一些浮泛的呼吁(进步页面展现速度),大家能够在IIS中启用内容过期,
那样设置后,IIS就能生成Cache-Control响应头,显然告诉浏览器将文件缓存多久。

在IIS6中,那个参数很好找到:
九五至尊ii 8

唯独,在IIS7中,这么些参数不不难被发觉,必要以下操作才能找到:
选用网站(大概网站子目录)节点,双击【HTTP响应标头】
九五至尊ii 9

再点击左边的【设置常用标头】链接,
九五至尊ii 10

那会儿将会议及展览示: 九五至尊ii 11

说明:【启用内容过期】那么些装置能够依照整个网站,也能够针对子目录,只怕三个具体的公文。

注意:一旦您在IIS7中针对有些子目录可能文件设置【启用内容过期】,前面包车型客车对话框看起来是一模一样的,
不过,在IIS6中,大家得以领会地从对话框的标题栏中领会大家在做怎么样:
九五至尊ii 12

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

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

说到此处恐怕有人会想:那几个过期时光本身该装置多短时间呢?
十分钟,三个钟头,一天,依旧七个月? 以作者之见,这几个日子越久越好。
大概有人又会说了:万一小编要升级有个别JS文件如何是好,时间设置久了,用户怎么翻新呢?
即便您问作者那一个题材,笔者也只好算得你的代码不客观(毕竟你消除不了升级难点),想精通原因来说,请继续阅读。

回去顶部

杀鸡取蛋给源文件升级难题

对此有些范畴相当的小的网站以来,常常会将能源文件与程序文件一起安插到3个网站中。
那时大概会采取上边包车型大巴点子来引用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文件的艺术有弱点,
那种办法完全没有设想到版本升级难题, 正确的方式有二种: 1.
给文件名添加版本号,像jquery那样,每一种版本3个文本(jquery-1.4.4.min.js)。

  1. 在U凯雷德L前边添加1个版本号,让本来的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>

那2个工具方法的贯彻代码如下(在MyMVC的示范代码中):九五至尊ii 13

private static readonly string s_root = HttpRuntime.AppDomainAppPath.TrimEnd('\\');

public static string RefJsFileHtml(string path)
{
    string filePath = s_root + path.Replace("/", "\\");
    string version = File.GetLastWriteTimeUtc(filePath).Ticks.ToString();
    return string.Format("<script type=\"text/javascript\" src=\"{0}?_t={1}\"></script>\r\n", path, version);
}

public static string RefCssFileHtml(string path)
{
    string filePath = s_root + path.Replace("/", "\\");
    string version = File.GetLastWriteTimeUtc(filePath).Ticks.ToString();
    return string.Format("<link type=\"text/css\" rel=\"Stylesheet\" href=\"{0}?_t={1}\" />\r\n", path, version);
}

地方那种获取文件版本号的艺术,是一种相比不难的化解方案。
每一种引用的地点在生成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">
    <FileVersion FilePath="/js/JScript.js" Version="255324" />
    <FileVersion FilePath="/css/StyleSheet.css" Version="2324235" />
</ArrayOfFileVersion>

若果您觉得那种安排文件须求手工业维护,不够自动化,还是能应用程序的法子自行在运作时保卫安全三个列表,
总而言之,直接引用能源文件的点子是一种直接耦合,会给文件升级带来劳动,
大家能够通过3个表面方法来解开这一个一贯耦合(给FileVersion扩展2个属性还还是能将里面地址改成三个CDN地址)。

归来顶部

缓解能源文件升级难题

对此部分范围极小的网站的话,经常会将财富文件与程序文件一起安插到1个网站中。
那时恐怕会使用上面的艺术来引用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文件的办法有通病,
那种办法完全没有设想到版本升级难点, 正确的主意有三种: 1.
给文件名添加版本号,像jquery那样,每种版本二个文件(jquery-1.4.4.min.js)。

  1. 在U路虎极光L前面添加1个版本号,让原本的ULX570L失效。

第③种艺术由于每回升级都爆发了1个新文件,所以不设有缓存难点,可是,维护一大堆文件的基金或然会比较大,
因而作者建议接纳第二种艺术来消除。

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的言传身教代码中):
九五至尊ii 14

private static readonly string s_root = HttpRuntime.AppDomainAppPath.TrimEnd('\\');

public static string RefJsFileHtml(string path)
{
    string filePath = s_root + path.Replace("/", "\\");
    string version = File.GetLastWriteTimeUtc(filePath).Ticks.ToString();
    return string.Format("<script type=\"text/javascript\" src=\"{0}?_t={1}\"></script>\r\n", path, version);
}

public static string RefCssFileHtml(string path)
{
    string filePath = s_root + path.Replace("/", "\\");
    string version = File.GetLastWriteTimeUtc(filePath).Ticks.ToString();
    return string.Format("<link type=\"text/css\" rel=\"Stylesheet\" href=\"{0}?_t={1}\" />\r\n", path, version);
}

地点那种获取文件版本号的办法,是一种比较简单的化解方案。
每种引用的地方在生成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">
    <FileVersion FilePath="/js/JScript.js" Version="255324" />
    <FileVersion FilePath="/css/StyleSheet.css" Version="2324235" />
</ArrayOfFileVersion>

万一您觉得那种布置文件需求手工业维护,不够自动化,还是可以利用程序的章程自行在运转时保卫安全1个列表,
总而言之,直接引用财富文件的措施是一种直接耦合,会给文件升级带来劳动,
大家能够透过一个表面方法来解开那一个一贯耦合(给FileVersion增添壹性格质还仍是能够将在那之中地址改成3个CDN地址)。

回去顶部

启用压缩

缩减响应结果也是常用的网站优化措施,由于以后的浏览器都已帮助压缩功效,
因而,假使在服务端能压缩响应结果,对于网速较慢的用户来说,会回落过多互联网传输时间,最后的体会正是网页展现速度变快了!

IIS6即使提供压缩的装置界面,但是配置是基于服务器级其余:
九五至尊ii 15

瞩目:那里的【应用程序文件】不包含aspx,假诺须求压缩aspx的响应,
要求手工业修改x:\WINDOWS\system32\inetsrv\MetaBase.xml文件(参考加大字号部分):九五至尊ii 16

<IIsCompressionScheme    Location ="/LM/W3SVC/Filters/Compression/gzip"
        HcCompressionDll="%windir%\system32\inetsrv\gzip.dll"
        HcCreateFlags="1"
        HcDoDynamicCompression="TRUE"
        HcDoOnDemandCompression="TRUE"
        HcDoStaticCompression="TRUE"
        HcDynamicCompressionLevel="9"
        HcFileExtensions="htm
            html
            txt
            js
            css
            htc"
        HcOnDemandCompLevel="10"
        HcPriority="1"
        HcScriptFileExtensions="asp
            exe
            aspx
            axd"
    >

表达:要修改MetaBase.xml,必要结束IIS Admin Service服务。

在IIS7中,大家得以在服务器级别配备压缩参数:
九五至尊ii 17

然后在种种网站中打开可能关闭压缩功能:
九五至尊ii 18

表明:IIS7中早就不复采纳MetaBase.xml,所以大家找不到IIS6的这一个设置了。IIS7滑坡的过滤条件不再针对扩张名,而是利用了
mimeType规则(保存在applicationHost.config)。
依据IIS7的削减规则,当大家启用动态压缩后,会压缩aspx的响应结果。

两种压缩方法的异样: 1.
静态内容收缩:当服务器在第1回响应某些静态文件时,会生成七个回落后的结果,并保存到磁盘中,以便重用。
2.
动态内容收缩:【每一回】在响应客户端从前,压缩响应结果,在内部存款和储蓄器中成就,因而会给CPU带来一些担负。

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

回去顶部

启用压缩

调减响应结果也是常用的网站优化措施,由于以往的浏览器都已帮助压缩效率,
由此,假如在服务端能减小响应结果,对于网速较慢的用户来说,会削减过多互连网传输时间,最后的心得就是网页展现速度变快了!

IIS6纵然提供压缩的装置界面,然则配置是基于服务器级其他:
九五至尊ii 19

留意:这里的【应用程序文件】不包蕴aspx,就算须要压缩aspx的响应,
要求手工修改x:\WINDOWS\system32\inetsrv\MetaBase.xml文件(参考加大字号部分):
九五至尊ii 20

<IIsCompressionScheme    Location ="/LM/W3SVC/Filters/Compression/gzip"
        HcCompressionDll="%windir%\system32\inetsrv\gzip.dll"
        HcCreateFlags="1"
        HcDoDynamicCompression="TRUE"
        HcDoOnDemandCompression="TRUE"
        HcDoStaticCompression="TRUE"
        HcDynamicCompressionLevel="9"
        HcFileExtensions="htm
            html
            txt
            js
            css
            htc"
        HcOnDemandCompLevel="10"
        HcPriority="1"
        HcScriptFileExtensions="asp
            exe
            aspx
            axd"
    >

注解:要修改MetaBase.xml,须求甘休IIS Admin 瑟维斯服务。

在IIS7中,我们得以在服务器级别配备压缩参数:
九五至尊ii 21

下一场在各类网站中打开只怕关闭压缩作用:
九五至尊ii 22

表明:IIS7中早就不复选取MetaBase.xml,所以大家找不到IIS6的那多个设置了。
IIS7滑坡的过滤条件不再针对扩大名,而是选择了mimeType规则(保存在applicationHost.config)。
依据IIS7的削减规则,当大家启用动态压缩后,会压缩aspx的响应结果。

三种压缩方法的差别: 1.
静态内容减弱:当服务器在第一次响应某些静态文件时,会转变3个回落后的结果,并保存到磁盘中,以便重用。
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>

回来顶部

除去无用的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网站是2个大的话题,除了博客中介绍的这个格局之外,还有以下形式也是足以参考的:

  1. 晋级服务器硬件配置。 2. 使用Windows Server
    二〇一〇之上版本操作系统(互连网性能比二〇〇〇要好)。 3.
    优化操作系统配置(例如禁止使用不需求的劳务)。 4. 剥夺调试格局。 5.
    网站选取专用应用程序池。

别的优化增选

优化ASP.NET网站是1个大的话题,除了博客中牵线的这么些格局之外,还有以下措施也是能够参照的:

  1. 升级服务器硬件配备。 2. 行使Windows Server
    二零零六以上版本操作系统(网络质量比二〇〇一要好)。 3.
    优化操作系统配置(例如禁止使用不必要的劳务)。 4. 剥夺调节和测试情势。 5.
    网站使用专用应用程序池。

Your Comments

近期评论

    功能


    网站地图xml地图