2008-02-18

玩玩asp.net 2.0的caching系列一 - OutputCache與Substitution

作網站的首頁的時候,通常為了增加效能,都會作一些cache的動作,
而在asp.net中,要作將網頁作cache很簡單,
如果要cache整個頁面,只要在aspx中加上下面這段

<%@ OutputCache Duration="60" VaryByParam="None" %>

這樣可以讓你的頁面cache 60秒.
如果你的網址如下

ShowCity.aspx?city=101

也就是會因為參數不同而有不同結果,而你也希望能快取這些頁面,
那就將設定改為

<%@ OutputCache Duration="60" VaryByParam="city" %>

如果有多個參數的話,那就以分號(;)區隔就可以了,例如

<%@ OutputCache Duration="60" VaryByParam="city;zipcode" %>

可是現在問題來了.
如果首頁都是公開的資料那也就沒有甚麼問題,
但是現在首頁要放個登入者的名稱,
讓使用者知道自己已經登入,而且知道自己叫甚麼名字.
而整頁作outputcache的話,一連到網頁可能會看到別人的名字...
一開始,是用ajax的方式,在也面呈現以後,
透過javascript去呼叫一隻aspx取得登入資料,然後顯示在某個div裡面.

但後來發現asp.net 2.0中有個Substitution的控制項可以解決這樣的問題,

而Substitution 的用法如下:

aspx

<asp:Substitution ID="Substitution1" runat="server" MethodName="GetDateTime" />

aspx.cs

public static string GetDateTime(HttpContext context)
{
    return "主機時間 : " + DateTime.Now.ToString();
}

範例網址 : http://vip.blueshop.com.tw/ajun/cachetest.aspx

點選上面的範例網址,然後重新整理幾次,
你會發現上面的主機時間60秒才會更新.
但下面的主機時間是每次都會更新.

 

參考網址:
http://dotnetjunkies.com/QuickStartv20/aspnet/doc/ctrlref/standard/substitution.aspx

範例下載:
http://ajunlee.googlepages.com/CacheTest.rar

張貼留言

Google以後可以查祖譜嗎?

今天看到一篇INDISE的文章 : 比爾蓋茲和賈伯斯,他們的孩子都是 14 歲才能用手機 想說比爾蓋茲不是有點年紀了嗎? 他的小孩應該也都不小了. 他們14歲時應該還沒有甚麼智慧手機吧… 說不定還是在BB call的年代. 所以就好奇的用google查一下有沒...