日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

頁面緩存『轉(zhuǎn)』

系統(tǒng) 2104 0

一般情況下,WEB頁面都會在Internet臨時(shí)文件夾中有一個(gè)臨時(shí)文件.
我在操作IE時(shí)會出現(xiàn)這種情況:
假如說有一個(gè)頁面Page1.aspx,在我第一次訪問后,它會在我的Internet臨時(shí)文件夾里有一個(gè)Page1.aspx文件生成.之后,如果我改了Page1.aspx的數(shù)據(jù)后再次訪問該頁面,發(fā)現(xiàn)IE并沒有對這個(gè)Page1.aspx的數(shù)據(jù)進(jìn)行更新,反而打開的是我第一次訪問的頁面.為什么會這樣,是因?yàn)镮E自動(默認(rèn))調(diào)用了Internet臨時(shí)文件夾里有一個(gè)Page1.aspx文件,而不是重新下載新的Page1.aspx.
怎樣能讓IE自動重新下載新的Page1.aspx呢?
一種方法是對Internet選項(xiàng)進(jìn)行設(shè)置.
Internet選項(xiàng)-->常規(guī)-->Internet臨時(shí)文件中"設(shè)置"-->每次訪問此頁時(shí)檢查.
這種設(shè)置時(shí)最好同時(shí)刪除臨時(shí)文件.
這種方法是讓客戶自己設(shè)置自己的瀏覽器,如果客戶忘記了設(shè)置,那么,新的頁面總是下載不到本地.這時(shí),客戶會怎樣認(rèn)為呢?("肯定是程序的錯(cuò)!"其實(shí)也不是程序的錯(cuò),但是用程序完全可以解決這個(gè)問題)
第二種方法:用程序自己來讓頁面自動下載.
這種方法實(shí)際上是讓頁面不保存到Internet臨時(shí)文件夾中,每次訪問頁面都會讓瀏覽器下載頁面.
只要在aspx.cs代碼的Page_Load事件中加上

Context.Response.Cache.SetCacheability(HttpCacheability.NoCache);

即可.

不防你試試.在不加這句時(shí),你打開頁面,Internet臨時(shí)文件夾里會有一個(gè)頁面文件,而加了,就會沒有了.
不過,像aspx文件中如果有圖片文件或js文件,那還是會下載到Internet臨時(shí)文件夾的.


-------------------------------------------------------------------------------------------------------------------


頁面緩存

使用 OutputCache 指令。

<%@ OutputCache Duration="3600"

????????????? ? Location="Any"

????????????? ? VaryByCustom="browser"

????????????? ? VaryByParam="RequestID" %>

其中 Duration VaryByParam 特性是必須的。

?

Location 控制頁面緩存的位置

Location

含義

Any

默認(rèn)值。意味著頁面的輸出可以緩存在客戶端瀏覽器,緩存在任何“下游”的客戶端(如代理服務(wù)器),或緩存在 Web 服務(wù)器本身

Client

指明輸出緩存只能存儲在發(fā)出請求的客戶端(即瀏覽器)的本地緩存中

Downstream

指明輸出緩存能存儲在任何支持 HTTP1.1 緩存的設(shè)備(如代理服務(wù)器)中

Server

指明輸出緩存將存儲在 Web 服務(wù)器上

None

指明該頁面禁用輸出緩存

?

Duration 允許我們控制頁面在緩存中生存的時(shí)間(單位是秒)

?

VaryByParam 允許我們緩存頁面的不同版本。在上面的例子中, VaryByParam 設(shè)為了 RequestID ,所以 ASP.NET 使用 RequestID 參數(shù)的不同值,這些值或者是在 HTTP GET 的查詢字符串中傳入,或者是在 HTTP POST 的參數(shù)中傳入。可以通過檢查 RequestID 參數(shù)的值讓應(yīng)用程序區(qū)分不同的用戶;通過在頁面的 OutputCache 指令中放置 VaryByParam "RequestID" ,可以讓 ASP.NET 為每個(gè)用戶緩存頁面的不同版本。

如果不想根據(jù)參數(shù)的值緩存頁面的不問版本,那么只要把 VaryByParam 設(shè)為 none

也可以要求 ASP.NET 為每個(gè)可能的參數(shù)組合緩存頁面的一個(gè)版本。為此,可把 VaryByParam 設(shè)為 *

?

VaryByHeader VaryByCustom 特性與 VaryByParam 的相似之處在于,它們允許指定何時(shí)應(yīng)創(chuàng)建頁面新的緩存版本。

VaryByHeader 允許我們根據(jù)由分號分隔的 HTTP 頭的列表末緩存頁面的不向版本。

VaryByCustom 當(dāng)設(shè)為 browser 時(shí),允許我們根據(jù)瀏覽器的名稱和主版本信息緩存不同版本。也可以把它設(shè)為一個(gè)自定義方法的名稱,從而實(shí)現(xiàn)我們自己的邏輯,控制緩存的版本。

?

片斷緩存

可以利用用戶控件將頁面分段,在 ascx 文件中寫入緩存的語句,而不在 aspx 文件中寫緩存語句,這樣 ASP.NET 就可以只緩存 ascx 片斷的輸出了。一般像頁眉或頁腳基本上都是一樣的,就不需要重新加載。但是如果其中有動態(tài)變化的數(shù)據(jù)就不能對其進(jìn)行緩存,因?yàn)橐坏┍痪彺婧蟪绦蚓筒粫賱?chuàng)建它的實(shí)例來更新數(shù)據(jù)顯示,只有等到生存期過期才行,所以對于這種情況就不適于用頁面片斷緩存。

注意:

一、注意片段緩存不支持 Location 特性;緩存頁面片段惟一合法的地方是 web 服務(wù)器。這是因?yàn)槠尉彺嬖? ASP.NET 中是新的功能,所以瀏覽器和代理服務(wù)器不支持。

二、片段緩存有另外一個(gè)在頁面緩存中沒有的特性—— VaryByControl VaryByControl 特性允許指定一個(gè)由分號分隔的字符串列表,代表用戶控件內(nèi)使用的控件的名稱; ASP.NET 將針對值的每個(gè)不同的組合生成用戶構(gòu)件的一個(gè)緩存版本。

?

數(shù)據(jù)緩存

低級 API Cache 類,它位于 ASP.NET 中的 System.web.Caching 命名空間,可以用它緩存生成很耗費(fèi)資源的數(shù)據(jù)。 Cache 類的使用和 Session Application 對象一樣簡單。每個(gè)應(yīng)用程序只有一個(gè) Cache 對象——這意味著使用 Cache 對象存儲在緩存中的數(shù)據(jù)是應(yīng)用程序級別的數(shù)據(jù)。使事情更為簡單的是, Page 類的 Cache 屬性使應(yīng)用程序的 Cache 對象實(shí)例能在代碼中使用。

通過 Cache 對象緩存的數(shù)據(jù)存儲在應(yīng)用程序的內(nèi)存中。這意味著該數(shù)據(jù)的生存期不會超過應(yīng)用程序的重啟 ( 事實(shí)上,這和存儲在 Application Session 對象中的數(shù)據(jù)一樣,除非使用 StateService SQL State 會話模式存儲 Session 數(shù)據(jù) )

具體的使用和語法與 Session Application 一樣。轉(zhuǎn)換回來的時(shí)候需要注意對其進(jìn)行相應(yīng)類型的強(qiáng)制類型轉(zhuǎn)換。

?

這不是在 ASP.NET 緩存中添加緩存項(xiàng)的惟一方式。 Cache 對象有兩個(gè)方法 Insert() 方法和 Add() 方法,它們靈活性更高。它們的用法近似,但稍有不同:

Insert() 方法用于覆蓋 ASP.NET 緩存中現(xiàn)有的緩存項(xiàng)。

Add() 方法只用于在 ASP.NET 緩存中添加新的緩存項(xiàng) ( 如果用它覆蓋現(xiàn)有的緩存項(xiàng),則會失敗 )

每個(gè)方法都有 7 個(gè)參數(shù),而且兩個(gè)方法的參數(shù)相同。

在緩存某一項(xiàng)時(shí),可以指定它的相關(guān)性,告訴 ASP.NET 該緩存項(xiàng)在緩存中一直保留到某個(gè)事件發(fā)生時(shí)為止。

相關(guān)性值

含義

CacheDependency

允許指定一個(gè)文件或緩存鍵。如果文件發(fā)生變化,對象就被刪除。如果緩存鍵發(fā)生變化,對象也被刪除。

DateTime

這是一個(gè) DataTime 值,指明緩存數(shù)據(jù)過期的時(shí)間(絕對過期時(shí)間)

TimeSpan

這是一個(gè)時(shí)間間隔,指明緩存數(shù)據(jù)在上一次訪問后可以在緩存中保留多長時(shí)間(彈性過期時(shí)間)

使用 CacheItemPriority 來指定緩存數(shù)據(jù)的優(yōu)先級,以便在緩存被填滿的時(shí)候刪除那些優(yōu)先級低的數(shù)據(jù)。

優(yōu)先級值

含義

High

設(shè)為此優(yōu)先級的緩存項(xiàng)是最不可能在內(nèi)存不足時(shí)被刪除的

AboveNormal

設(shè)為此優(yōu)先級的緩存項(xiàng)比優(yōu)先級為 Normal 或以下的緩存項(xiàng)更優(yōu)先保留

Normal

設(shè)為此優(yōu)先級的緩存項(xiàng)比優(yōu)先級為 BelowNormal Low 的緩存項(xiàng)更優(yōu)先保留

BelowNormal

這是倒數(shù)第二級的優(yōu)先級;設(shè)為此優(yōu)先級的緩存項(xiàng)只比優(yōu)先級設(shè)為 Low 的緩存項(xiàng)更優(yōu)先保留

Low

設(shè)為此優(yōu)先級的緩存項(xiàng)是最有可能在內(nèi)存不足時(shí)被刪除的

Default

緩存項(xiàng)的優(yōu)先級的默認(rèn)值是 Normal

NotRemovable

當(dāng)緩存項(xiàng)設(shè)為此優(yōu)先級時(shí),是在告訴 ASP.NET 即使是內(nèi)存不足,也不要從緩存中刪除它

DateTime dt = new DateTime(DateTime . Now . Year, 12 , 31 );

Cache . Add( "MembersDataSet" ,dsMembers, null ,

dt,TimeSpan . Zero,

CacheItemPriority . Normal, null );

第一個(gè)參數(shù)是引用緩存對象的鍵,第二個(gè)參數(shù)是要緩存的對象。第三個(gè)參數(shù)是 null( 表明沒有相關(guān)性 )

第四和第五個(gè)參數(shù)是絕對的過期時(shí)間和彈性的過期時(shí)間。這里,我們指定緩存應(yīng)在當(dāng)前年份的最后一天過期 (dt) 。我們想指定沒有彈性的過期時(shí)間,所以第五個(gè)參數(shù)使用 TimeSpan.Zero 。第六個(gè)參數(shù)使用 System.Web.Caching.CacheItemPriority 枚舉中的一個(gè)值,把優(yōu)先級設(shè)為 Normal

?

指定一個(gè) 5 分鐘的彈性過期時(shí)間,沒有指定絕對過期時(shí)間

Cache . Add( "MembersDataSet" ,dsMembers, null ,

??????????????? DateTime . MaxValue,TimeSpan . FromMinutes( 5 ),

??????????? CacheItemPriority . Normal, null );

?

添加一個(gè)相關(guān)性。在這個(gè)例子中,過期時(shí)間也取決于一個(gè)文件的修改,即 test.xml 文件:

CacheDependency dep = new CacheDependency( @"C:\test.xml" );

Cache . Add( "MembersDataSet" ,dsMembers,dep,

??????????????? DateTime . MaxValue,TimeSpan . FromMinutes( 5 ),

??????????? CacheItemPriority . Normal, null );

?

過期時(shí)間取決于緩存中另一項(xiàng)的修改:

String[] dependencyKeys = new String[ 1 ];

dependencyKeys[ 0 ] = "MembersChanged" ;

CacheDependency dependency = new CacheDependency( null , dependencyKeys);

Cache . Add( "MembersDataSet" ,dsMembers,dependency,

??????????????? DateTime . MaxValue,TimeSpan . Zero,

??????????? CacheItemPriority . Normal, null );

?

最后一個(gè)參數(shù)是 CacheItemRemovedCallback 類型的,允許我們在緩存項(xiàng)從緩存中刪除時(shí)要求通知,可以編寫一個(gè)自定義的方法 ( 像這里的 ItemRemovedCallback() 方法 ) ,然后在第 7 個(gè)參數(shù)中指定該方法:

??????? public void ItemRemovedCallback(String key, Object value , CacheItemRemovedReason reason)

??????? {

??????? }

?

Cache . Add( "MembersDataSet" ,dsMembers,dependency,

??????? ??????? DateTime . MaxValue,TimeSpan . FromMinutes( 5 ),

??? ??????? CacheItemPriority . Normal,

new CacheItemRemovedCallback( this . ItemRemovedCallback));

第一個(gè)參數(shù)是在緩存中存儲緩存項(xiàng)時(shí)使用的鍵,第二個(gè)是存儲的對象本身,第三個(gè)是緩存項(xiàng)刪除的原因。

?

頁面緩存『轉(zhuǎn)』


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 沙洋县| 四子王旗| 临猗县| 丹阳市| 大理市| 丰台区| 鹰潭市| 鄂托克前旗| 安西县| 宣恩县| 蒙山县| 土默特左旗| 静宁县| 来安县| 朔州市| 桃江县| 中西区| 丰顺县| 榆中县| 即墨市| 象州县| 泽库县| 紫阳县| 海林市| 望江县| 友谊县| 开鲁县| 浮梁县| 怀集县| 华池县| 文昌市| 南漳县| 新乡县| 襄城县| 二手房| 德庆县| 勃利县| 万州区| 富裕县| 化州市| 文水县|