ASP.NET筆記之 viewstate與cache的使用
1、
(1、默認情況下ASP.Net是啟用ViewState的,這樣在頁面中會生成冗長的隱藏字段,ViewState對于需要PostBack處理的頁面才可能有用,對于新聞?wù)故卷撁娌恍枰换ネ耆珱]必要用ViewState。
(2、禁用ViewState的方式:
• 頁面整體禁用ViewState:在頂部Page中EnableViewState="False"
• 指定控件禁用ViewState,在控件上EnableViewState="False"
(3、頁面禁用ViewState以后并沒有完全去掉ViewState,只要ViewState不是很大就可以了。如果要求一點兒ViewState都不能有,那么則頁面中不能有runat=server的form,如果頁面中沒有表單元素,把form完全去掉就可以。如果Button等服務(wù)端控件沒有放到runat=server的form中,那么則是不可用的。
2、cache
(1、如果每次進入頁面的時候都查詢數(shù)據(jù)庫生成頁面內(nèi)容的話,如果訪問量非常大,則網(wǎng)站性能會非常差。而如果只有第一次訪問的時候才查詢數(shù)據(jù)庫生成頁面內(nèi)容,以后都直接輸出內(nèi)容,則能提高系統(tǒng)性能。這樣無論有多少人訪問都只訪問一次數(shù)據(jù)庫,數(shù)據(jù)庫壓力不變。
緩存是一種用空間換取時間的技術(shù),存在于計算機中很多地方,用來將一些慢速設(shè)備中的常用數(shù)據(jù)保存在快速設(shè)備中,取數(shù)據(jù)的時候直接從快速設(shè)備中取。比如CPU二級緩存、windows文件讀取緩存。
緩存存在失效的問題:為了保證從緩存中讀取數(shù)據(jù)和慢速數(shù)據(jù)中數(shù)據(jù)一致,則需要在慢速數(shù)據(jù)中對應(yīng)的數(shù)據(jù)發(fā)生變化的時候,清除緩存中相應(yīng)的數(shù)據(jù)。
緩存是改進網(wǎng)站性能的第一個手段,就像索引是改進數(shù)據(jù)庫性能的第一個手段一樣。
ASP.net緩存主要分為:頁面緩存、數(shù)據(jù)源緩存、數(shù)據(jù)緩存這三種主要類型。
(2、頁面緩存
給頁面添加下面的標(biāo)簽就可以啟用頁面緩存,
<%@ OutputCache Duration="20" VaryByParam="none"%>
這樣整個頁面的內(nèi)容都會被緩存,頁面中的ASP.Net代碼、數(shù)據(jù)源在緩存期間都不會被運行,而是直接輸出緩存的頁面內(nèi)容。 Duration表示緩存時間,以秒為單位,超過這個時間則緩存失效,再次生成以后會再緩存20秒,以此類推。在Page_Load處設(shè)置斷點、修改數(shù)據(jù)庫數(shù)據(jù)測試。
緩存是針對所有這個頁面的訪問者。這樣1個訪問者和1萬個訪問者、一次訪問和100萬次訪問對數(shù)據(jù)庫的壓力是一樣的。
***對于看新聞頁面來講,如果如上設(shè)置的話,則會緩存在第一個看到的新聞,因為?id=2、?id=3只是頁面的不同參數(shù)而已,為了能讓不同的新聞各自緩存,因此可以設(shè)置VaryByParam="id",表示對于不同的id參數(shù)進行單獨緩存。如果有多個確定緩存的參數(shù),則將參數(shù)名用分號隔開即可,比如VaryByParam="id;number"。
如果想讓任何不同的查詢字符串都創(chuàng)建不同的緩存,則設(shè)置VaryByParam="*",一般情況下設(shè)置“*”就足夠。
在WebUserControl中也可以像頁面緩存一樣設(shè)置控件的緩存。
(3、 數(shù)據(jù)源緩存
設(shè)定ObjectDataSource的CacheDuration(緩存時間:秒),EnableCaching=true。這樣每隔CacheDuration指定的時間段才調(diào)用SelectMethod指定的方法來執(zhí)行數(shù)據(jù)庫查詢,其他時候都是直接返回緩存的數(shù)據(jù)。
緩存固定的時間適用于首頁、文章列表等訪問頻繁的頁面,對于看貼頁面則不適合,假設(shè)有100萬個帖子,如果每個帖子都是固定緩存1小時的話,假設(shè)一小時之內(nèi)有10萬個帖子被看了,那么就要緩存十萬個帖子,非常占用內(nèi)存,因為“百年一看”的“墳帖”偶然被訪問一次也緩存一個小時,占用內(nèi)存。這時候可以采用“滑動窗口(sliding)”策略,比如帖子緩存10分鐘,如果10分鐘之內(nèi)又訪問了,則緩存的失效時間修改為從被訪問這一刻起的10分鐘之后,以此類推。這樣經(jīng)常訪問的帖子就可以“長期緩存”,而不經(jīng)常訪問的帖子也不會因為偶然訪問而長期占用緩存。設(shè)置方法,數(shù)據(jù)源:CacheExpirationPolicy="Sliding"。面試可聊。todo:貌似滑動有問題。不是問題,Sliding只是策略,服務(wù)器會參考。
(4、 緩存其他
頁面緩存、數(shù)據(jù)源緩存等內(nèi)部都是使用HttpRuntime.Cache來實現(xiàn)緩存的,在一些頁面緩存、數(shù)據(jù)源緩存完成不了的特殊的緩存要求中,可以直接調(diào)用HttpRuntime.Cache進行緩存。
(*)ASP.Net緩存默認是保存在內(nèi)存中的,還可以配置保存到數(shù)據(jù)庫中。大型網(wǎng)站還會配合使用Memcached等技術(shù)。
清除緩存。在緩存還未失效的時候可能需要立即清空緩存,讓數(shù)據(jù)庫的修改立即反映到界面中。ASP.Net沒有提供現(xiàn)成的方法,可以使用Hack級別的代碼。
3、錯誤頁面
(1、當(dāng)頁面發(fā)生錯誤的時候,ASP.Net會將錯誤信息展示出來,這樣一來不好看,二來會泄露網(wǎng)站的內(nèi)部實現(xiàn)信息,給網(wǎng)站帶來安全隱患,因此需要定制錯誤頁,發(fā)生錯誤時顯示開發(fā)人員定制的頁面。404頁面放點廣告也是好的嘛。
配置web.config,配置system.web內(nèi)的customErrors區(qū)域:
<customErrors mode="On" defaultRedirect="~MyErrorPage.aspx">
<error statusCode="403" redirect="~/NoAccess.htm" />
<error statusCode="404" redirect="~/FileNotFound.htm" />
</customErrors>
**mode三個可選值:On:總是顯示定制錯誤頁面;Off:不顯示定制錯誤界面,直接顯示調(diào)用堆棧等異常信息;
**remoteonly:對于本機的訪問顯示調(diào)用堆棧等異常信息,對于外部用戶的顯示定制錯誤頁面。
一般設(shè)置為RemoteOnly,這樣發(fā)生錯誤的話,管理員可以在服務(wù)器的瀏覽器中看詳細錯誤信息,普通用戶看不到。
學(xué)習(xí)演示的時候mode設(shè)置為On,否則看不到定制頁。可以在定義錯誤頁中判斷Request.UserHostAddress來設(shè)置某些ip看到異常信息,可以讀取Session如果是管理員則可以看異常信息。
(2、error子元素設(shè)定對于不同狀態(tài)碼使用不同的錯誤頁,很多網(wǎng)站把404做一個特殊的錯誤頁。沒有單獨設(shè)置的狀態(tài)碼錯誤則顯示defaultRedirect中指定的頁面。
錯誤頁即可以使用htm頁面,也可以使用aspx頁面。在aspx頁面中可以用HttpContext.Current.Server.GetLastError()拿到異常對象。一般不要把異常信息顯示給用戶,而是使用后面講的Log4Net等將異常記錄到系統(tǒng)日志。
*****如果要在錯誤頁面中拿到異常對象,比如customErrors中設(shè)置redirectMode="ResponseRewrite",因為默認是客戶端重定向(redirectMode="ResponseRedirect"),在錯誤頁面中就拿不到異常對象了。*****
<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~MyErrorPage.aspx">
<error statusCode="403" redirect="~/NoAccess.htm" />
<error statusCode="404" redirect="~/FileNotFound.htm" />
</customErrors>
相關(guān)文章
Asp.Net實現(xiàn)404頁面與301重定向的方法
這篇文章主要介紹了Asp.Net實現(xiàn)404頁面與301重定向的方法,較為詳細的分析了404頁面的原理與針對404錯誤與301跳轉(zhuǎn)的實現(xiàn)方法,是非常實用的技巧,需要的朋友可以參考下2014-11-11.NET 與樹莓派WS28XX 燈帶的顏色漸變動畫效果的實現(xiàn)
所謂顏色漸變動畫,首先,你要確定兩種顏色——起始色和最終色,比如從綠色變成紅色,綠色是起始,紅色是終點。這篇文章主要介紹了.NET 與樹莓派WS28XX 燈帶的顏色漸變動畫,需要的朋友可以參考下2021-12-12.Net Core3 用Windows 桌面應(yīng)用開發(fā)Asp.Net Core網(wǎng)站
這篇文章主要介紹了.Net Core3 用Windows 桌面應(yīng)用開發(fā)Asp.Net Core網(wǎng)站,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01解析WPF實現(xiàn)音頻文件循環(huán)順序播放的解決方法
本篇文章是對WPF實現(xiàn)音頻文件循環(huán)順序播放的方法進行了詳細的分析介紹,需要的朋友參考下2013-05-05使用Blazor框架實現(xiàn)在前端瀏覽器中導(dǎo)入和導(dǎo)出Excel
Blazor?是一個相對較新的框架,用于構(gòu)建具有?.NET?強大功能的交互式客戶端?Web?UI,本文主要介紹了如何在?Blazor?應(yīng)用程序中實現(xiàn)?SpreadJS?利用?.NET?的強大功能完成瀏覽器端的?Excel?導(dǎo)入導(dǎo)出,需要的可以參考一下2023-05-05ASP.NET中CKEditor與CKFinder的配置使用
這篇文章主要介紹了ASP.NET中CKEditor與CKFinder的配置使用的相關(guān)資料,需要的朋友可以參考下2015-06-06