什么是Viewstate?
例如:
input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="DwxNTgzOTU2ODA7dDw7bDxpPDE+Oz47bDx0PDtsPGk8MT47PjtsPHQ8QDA8cDxwPGw8UGFnZUNvdW50O18hSXRlbUNvdW50O18hRGF0YVNvdXJjZUl0ZW1Db3VudDtEYXRhS2V5czs+O2w8aTwxPjtpPDg+O2k8OD47bDw+Oz4+Oz47Ozs7Ozs7OztAMDxAMDxwPGw8SGVhZGVyVGV4dDtEYXRhRmllbGQ7U29ydEV4cHJlc3Npb247UmVhZE9ubHk7PjtsPHB1Yl9pZDtwdWJfaWQ7cHViX2lkO288Zj47Pj47Ozs7PjtAMDxwPGw8SGVhZGVyVGV4dDtEYXRhRmllbGQ7U29ydEV4cHJlc3Npb247UmVhZE9ubHk7PjtsPHB1Yl9uYW1lO3B1Yl9uYW1lO3B1Yl9uYW1 lO288Zj47Pj47Ozs7PjtAMDxw" /> |
當(dāng)我看到這一大片內(nèi)容的時候就覺得這是一個asp.net SEO過程中的難題,一直沒有找到方法,這些天查了下英文站找到了這個方法。下面是我看了Search Engine Optimization - Moving View State to the bottom of the page(http://www.manuelabadia.com/blog/PermaLink,guid,7924eaf8-b406-43af-9444-b816f6dfa246.aspx)這篇文章后,覺得該方法可行,就翻譯了一下,我英文水平有限,只把我看懂的大概意思和自己的理解寫下來,希望對大家有幫助。
當(dāng)我們?nèi)σ粋€ASP.Net頁面做SEO的時候,會發(fā)現(xiàn)一個很大的問題那就是隱藏的視圖狀態(tài)。很多搜索引擎都明確頁面抓取的界限,那就是只會抓取到網(wǎng)頁前幾千個字節(jié)的文本內(nèi)容,所以當(dāng)你頁面的前2KB是ViewState垃圾的時候,你的頁面很可能會遭到處罰。那么我這篇文章的目的就是把視圖狀態(tài)數(shù)據(jù)移動到盡可能少。
我已經(jīng)發(fā)現(xiàn)一些途徑來解決這個問題,在響應(yīng)輸出的時候重寫最終的HTML編碼。當(dāng)這個方法執(zhí)行后我發(fā)先它占有很大的CPU使用。所以,我需要一種方式既能實現(xiàn)功能又不浪費的CPU的方法。我發(fā)現(xiàn)反射的方式做到這一點。我的方法使用的ASP.NET控制適配器架構(gòu)。
控制適配器是一個可以用來控制所產(chǎn)生的HTML控制它適應(yīng)的類。由于頁面類,是一種負(fù)責(zé)任的渲染視圖狀態(tài)隱藏字段( Page.BeginFormRender調(diào)用Page.RenderViewStateFields ),適配器的網(wǎng)頁是必要的。然而,視圖狀態(tài)隱藏字段在ASP.NET基礎(chǔ)架構(gòu)中起著關(guān)鍵作用和難以修改相關(guān)的HTML 。
一個PageAdapter有一個方法叫做GetStatePersister()返回的對象繼承于PageStatePersister 。當(dāng)加載和保存視圖狀態(tài)的時候調(diào)用PageStatePersister。這里有2個類是從PageStatePersister : HiddenFieldPageStatePersister和SessionPageStatePersister繼承來的。第一種是默認(rèn)情況下,存儲視圖狀態(tài)中的隱藏字段名為__VIEWSTATE 。第二個存儲視圖狀態(tài)在session中。因此,我們可以很容易地創(chuàng)建一個自定義PageStatePersister來控制視圖狀態(tài)加載和保存過程。最大的問題是如何在form標(biāo)記關(guān)閉之前建立隱藏的視圖狀態(tài),同時以完全透明的解決辦法。經(jīng)過一些嘗試我想出了一個解決方案,我很高興的。
我意識到,這是不可能完全從頁面頂部刪除視圖狀態(tài)隱藏字段,因為他在ASP.NET的架構(gòu)這方面發(fā)揮著關(guān)鍵作用。但是,同任何自定義頁面狀態(tài)持續(xù)的ASP.NET基礎(chǔ)架構(gòu)提供至少一個空視圖狀態(tài)的隱藏字段只有70字節(jié):
免責(zé)聲明: 本文內(nèi)容來源于花滿樓 ,不代表本平臺的觀點和立場。
版權(quán)聲明:本文內(nèi)容由注冊用戶自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,武岡人網(wǎng)僅提供信息存儲服務(wù),不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲的內(nèi)容,請通過郵箱(admin@4305.cn)進(jìn)行舉報,一經(jīng)查實,本站將立刻刪除涉嫌侵權(quán)內(nèi)容。