Asp.net
ASP.NET:壓縮 ViewState
壓縮 ASP.NET ViewState 內容的最新和最好的方法是什麼?
這個性能怎麼樣?保持頁面快速並最小化數據流量是否值得?
我該怎麼做:
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTM4Mjc3NDEyOWQYAQUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgkFLGN0b DAwJENvbnRlbnRQbGFjZUhvbGRlcl9NYWluQ29udGVudCRSYWRCdXQxBSxjdGwwMCRDb250ZW50UGxhY2VIb 2xkZXJfTWFpbkNvbnRlbnQkUmFkQnV0MQUsY3RsMDAkQ29udGVudFBsYWNlSG9sZGVyX01haW5Db250ZW50J FJhZEJ1dDIFLGN0bDAwJENvbnRlbnRQbGFjZUhvbGRlcl9NYWluQ29udGVudCRSYWRCdXQyBSxjdGwwMCRDb 250ZW50UGxhY2VIb2xkZXJfTWFpbkNvbnRlbnQkUmFkQnV0MwUsY3RsMDAkQ29udGVudFBsYWNlSG9sZGVyX 01haW5Db250ZW50JFJhZEJ1dDQFLGN0bDAwJENvbnRlbnRQbGFjZUhvbGRlcl9NYWluQ29udGVudCRSYWRCd XQ0BSxjdGwwMCRDb250ZW50UGxhY2VIb2xkZXJfTWFpbkNvbnRlbnQkUmFkQnV0NQUsY3RsMDAkQ29udGVud FBsYWNlSG9sZGVyX01haW5Db250ZW50JFJhZEJ1dDXz21BS0eJ7991pzjjj4VXbs2fGBw==" />進入這樣的事情:
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTM4Mjc3N==" />
同樣,在對此進行一些研究之後,我在一篇關於Compressing View State的部落格文章中總結了我的發現。
為了保存壓縮的視圖狀態,這就是我所做的:
protected override void SavePageStateToPersistenceMedium(object state) { SaveCompressedPageState(state); } private void SaveCompressedPageState(object state) { byte[] viewStateBytes; using(MemoryStream stream = new MemoryStream()) { ObjectStateFormatter formatter = new ObjectStateFormatter(); formatter.Serialize(stream, state); viewStateBytes = stream.ToArray(); } byte[] compressed = CompressionHelper.Compress(viewStateBytes); string compressedBase64 = Convert.ToBase64String(compressed); ClientScript.RegisterHiddenField(ViewStateFieldName, compressedBase64); }對於載入部分,這段程式碼使它對我有用:
protected override object LoadPageStateFromPersistenceMedium() { return LoadCompressedPageState(); } private object LoadCompressedPageState() { string viewState = Request.Form[ViewStateFieldName]; if(string.IsNullOrEmpty(viewState)) { return string.Empty; } byte[] decompressed = CompressionHelper.Decompress(viewState); string decompressedBase64 = Convert.ToBase64String(decompressed); ObjectStateFormatter formatter = new ObjectStateFormatter(); return formatter.Deserialize(decompressedBase64); }