ASP.NET 頁面緩存OutputCache用法實例(附ab壓力測試對比圖)

本文主要介紹Web窗體頁面中的使用方法,MVC中使用方法,你們自行百度。

1、簡單一行指令便可實現 瀏覽器

<%@ OutputCache VaryByParam="none"  Duration="300" %>

這樣整個頁面就被緩存了,因爲我是首頁進行的緩存,沒有任何參數因此VaryByParam值設置爲none,若是但願經過指定的參數來緩存內容能夠設置"id;classid"這種形式,或者乾脆就用"*",經過全部參數來緩存內容。

2、緩存先後性能對比

使用ab模擬100個用戶1000次併發,先後結果以下:


如上圖所示,加了緩存以後,吞吐量大約增大了10倍,每次請求的處理時間縮小到原來的十分之一左右,性能明顯提高。


3、OutputCache的BUG

這個bug伴隨.NET1.0到4.0,就是OutputCache會忽略瀏覽器的緩存,本人用的是.NET 4.0,微軟官方說已經完美解決,可是實測bug依然存在,具體表現是:

1.VaryByParam設置爲none時,沒有bug,F5刷新狀態碼每次都是304緩存


2.VaryByParam設置爲*或其餘值時,每次按F5刷新狀態碼每次都是200服務器



注:這個時候雖然瀏覽器沒有幫助咱們緩存頁面,每次請求都是從服務器請求,可是服務器端是將頁面緩存了的,因此用ab測試效率依然是很高的。固然若是瀏覽器幫助咱們緩存,壓根就不會產生此次請求了。

3.解決方法就是在Page_Load中加以下代碼

併發

Response.Cache.SetOmitVaryStar(true);

這樣客戶端瀏覽器就實現了緩存,除非強制刷新,會再次從服務器端請求數據。

4、局部緩存數據,使部分數據不被緩存

這個就太常見了,咱們總不但願登陸狀態也被緩存吧,假設頁面沒作任何改進,你登陸以前是【登陸】【註冊】這種按鈕,當你登陸後依然顯示【登陸】【註冊】這確定是不妥的,那麼咱們但願這部份內容不被緩存,那咱們就要用到Substitution控件。

在頁面中放置Substitution控件函數

<asp:Substitution ID="subLoginStatus" runat="server" MethodName="GetLoginStatus"/>

在後臺cs文件中添加函數GetLoginStatus工具

public static string GetLoginStatus(HttpContext context)
{
    if (context.Session["usr"] != null)
    {
        return context.Session["usr"].ToString() + "歡迎您的登陸";
    }
    else
    {
        return "【登陸】【註冊】";
    }
}

這樣頁面其餘部分都被緩存,只有登陸狀態是每次都動態讀取的。

注:因爲頁面中有一部分是動態的,因此每次請求的狀態碼都是200。

5、OutputCache失效的問題

網上有說Cookie和Cache衝突,你們自行檢查,我在作的時候也確實遇到了OutputCache失效的問題,排查代碼發現,包含以下代碼性能

<script language="C#" runat="server">
    string siteId = "ab71a8cfda50fbfeb2d3f6ee182af524";
</script>
<!-- #include file="hm.aspx" -->
<% string ret = TrackPageView(); %>
<div style="display:none;"><img src="<%= ret %>" width="0" height="0"/></div>


這段代碼是百度的統計代碼,去掉以後解決。若是確實想加百度的統計,能夠替換以下相似代碼:測試

<div style="display:none;">
    <script>
        var _hmt = _hmt || [];
        (function () {
            var hm = document.createElement("script");
            hm.src = "//hm.baidu.com/hm.js?ab71a8cfda50fbfeb2d3f6ee182af524";
            var s = document.getElementsByTagName("script")[0];
            s.parentNode.insertBefore(hm, s);
        })();
    </script>
</div>

附件下載:ApacheBench(ab)壓力測試工具(Windows版)spa

相關文章
相關標籤/搜索