ashx頁面緩存

當用戶訪問頁面時,整個頁面將會被服務器保存在內存中,這樣就對頁面進行了緩存。當用戶再次訪問該頁,頁面不會再次執行數據操做,頁面首先會檢查服務器中是否存在緩存,若是緩存存在,則直接從緩存中獲取頁面信息,若是頁面不存在,則建立緩存。json

頁面輸出緩存適用於那些數據量較多,而不會進行過多的事件操做的頁面,若是一個頁面須要執行大量的事件更新,以及數據更新,則並不能使用頁面輸出緩存。緩存

 

一般咱們在緩存aspx頁面的時候,能夠頁面經過以下設置服務器

<%@ OutputCache Duration="120" VaryByParam="paramName" %>app

上述代碼使用@OutputCatch指令聲明瞭頁面緩存,該頁面將被緩存120秒。@OutputCatch指令包括10個屬性,經過這些屬性可以分別爲頁面的不一樣狀況進行緩存設置,經常使用的屬性以下所示:ide

 CacheProfile:獲取或設置OutputCacheProfile名稱。性能

 Duration:獲取或設置緩存項須要保留在緩存中的時間。ui

 VaryByHeader:獲取或設置用於改變緩存項的一組都好分隔的HTTP標頭名稱。spa

 Location:獲取或設置一個值,該值肯定緩存項的位置,包括Any、Clint、Downstream、None、Server和ServerAndClient。默認值爲Any。code

 VaryByControl:獲取或設置一簇分好分隔的控件標識符,這些標識符包含在當前頁或用戶控件內,用於改變當前的緩存項。blog

 NoStore:獲取或設置一個值,該值肯定是否設置了「Http Cache-Control:no-store」指令。

 VaryByCustom:獲取輸出緩存用來改變緩存項的自定義字符串列表。

 Enabled:獲取或設置一個值,該值指示是否對當前內容啓用了輸出緩存。

 VaryByParam:獲取查詢字符串或窗體POST參數的列表。

對於aspx頁面來講,很是簡單。那麼在ashx頁面中,咱們又該如何設頁面緩存呢?

直接上代碼,以下:

public class autocomp : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        OutputCachedPage page = new OutputCachedPage(new OutputCacheParameters
        {
            Duration = 120,
            Location = OutputCacheLocation.Any,
            VaryByParam = "paramName"
        });

        page.ProcessRequest(HttpContext.Current);

        context.Response.ContentType = "application/json";
        context.Response.BufferOutput = true;

        var searchTerm = (context.Request.QueryString["paramName"] + "").Trim();

        context.Response.Write(searchTerm);
        context.Response.Write(DateTime.Now.ToString("s"));
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
    private sealed class OutputCachedPage : Page
    {
        private OutputCacheParameters _cacheSettings;

        public OutputCachedPage(OutputCacheParameters cacheSettings)
        {
            // Tracing requires Page IDs to be unique.
            ID = Guid.NewGuid().ToString();
            _cacheSettings = cacheSettings;
        }

        protected override void FrameworkInitialize()
        {
            base.FrameworkInitialize();
            InitOutputCache(_cacheSettings);
        }
    }
}

若是Query String多個查詢參數,注意查看VaryByParam
public class test : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        OutputCachedPage page = new OutputCachedPage(new OutputCacheParameters
        {
            Duration = 120,
            Location = OutputCacheLocation.Server,
            VaryByParam = "name;city"
        });

        page.ProcessRequest(HttpContext.Current);

        context.Response.ContentType = "application/json";
        context.Response.BufferOutput = true;

        var searchTerm = (context.Request.QueryString["name"] + "").Trim();
        var searchTerm2 = (context.Request.QueryString["city"] + "").Trim();

        context.Response.Write(searchTerm+" "+searchTerm2+" ");
        context.Response.Write(DateTime.Now.ToString("s"));
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
    private sealed class OutputCachedPage : Page
    {
        private OutputCacheParameters _cacheSettings;

        public OutputCachedPage(OutputCacheParameters cacheSettings)
        {
            // Tracing requires Page IDs to be unique.
            ID = Guid.NewGuid().ToString();
            _cacheSettings = cacheSettings;
        }

        protected override void FrameworkInitialize()
        {
            base.FrameworkInitialize();
            InitOutputCache(_cacheSettings);
        }
    }
}
相關文章
相關標籤/搜索