我在网站上遇到了性能问题,因为源代码中的viewstate太长了。在某些页面上,它的大小超过15-20kb。这增加了浏览器的加载时间。
有没有办法部分或完全禁用viewstate而不会对网站的其他模块造成任何伤害。仅供参考,这些示例页面上有一个列表视图和一个表单。 viewstate非常长。
更多示例页面
答案 0 :(得分:2)
您可能希望一般为您的Page禁用ViewState,然后仅为需要/使用它的控件启用ViewState。
请参阅this MSDN page on the Control.ViewStateMode
property,它介绍了如何进行设置:
禁用页面的视图状态并为特定页面启用它 控制页面,设置页面的EnableViewState属性和 将控件设置为true,将页面的ViewStateMode属性设置为 禁用,并将控件的ViewStateMode属性设置为 启用。
您需要进行一些测试,以查看哪些控件需要/使用特定应用中的ViewState。但是,基本上,
这样做绝对可以减少ViewState对你网页的负担。
答案 1 :(得分:1)
好吧,我不能独自离开:
Firebug表示,以下一些代码阻止该网站呈现大约6秒钟。我认为这是jsapi(基于来自chrome工具的信息),但是以下内容返回了“502 Bad Gateway”消息,这意味着它在那里旋转它的轮子无法处理,同时阻止您的网页显示。
我会将<script ..
调用移动到它所属的标题。然后我将google.load
和google.setOnLoadCallback
移到网页底部,使其最后运行。
最后,我弄明白为什么它无法正常工作。
为您做好准备:将Firebug加载到Firefox中,并学习如何使用它的Net工具查看网站加载问题。
<div class="sr_bx1 FL clearfix">
<div class="FL searchbg">
<div id='cse' style='width: 100%;'>Loading</div>
<script src='http://www.google.com/jsapi' type='text/javascript'></script>
<script type='text/javascript'>
google.load('search', '1', { language: 'en', style: google.loader.themes.V2_DEFAULT });
google.setOnLoadCallback(function () {
var customSearchOptions = {};
var orderByOptions = {};
orderByOptions['keys'] = [{ label: 'Relevance', key: '' }, { label: 'Date', key: 'date'}];
customSearchOptions['enableOrderBy'] = true;
customSearchOptions['orderByOptions'] = orderByOptions;
var imageSearchOptions = {};
imageSearchOptions['layout'] = 'google.search.ImageSearch.LAYOUT_POPUP';
customSearchOptions['enableImageSearch'] = true;
customSearchOptions['overlayResults'] = true;
var customSearchControl = new google.search.CustomSearchControl('010882286766777081969:xkox132izzk', customSearchOptions);
customSearchControl.setResultSetSize(google.search.Search.FILTERED_CSE_RESULTSET);
var options = new google.search.DrawOptions();
options.setAutoComplete(true);
customSearchControl.draw('cse', options);
}, true);
</script>
</div>
答案 2 :(得分:1)
使用Page Adapter Class,您可以解决此问题。我发现以下解决方案对ASP.NET Web应用程序有用:
视图状态序列化由PageStatePersister类型的对象处理。 (PageStatePersister类是一个抽象类,它定义了将视图状态序列化为某些持久介质的基本级功能。)
<强>步骤:强>
1)在您的Web应用程序中,添加文件夹:App_Browsers
2)在此文件夹中,添加新的浏览器文件:ViewStateAdapter.browser
3)在其中编写以下代码:
<browsers>
<browser refID="Default">
<controlAdapters>
<adapter controlType="System.Web.UI.Page" adapterType="ServerSideViewStateAdapter" />
</controlAdapters>
</browser>
</browsers>
4)在您的WebApplication中,添加文件夹:App_Code
5)在此文件夹中,添加新的ClassFile:ServerSideViewStateAdapter.cs
6)在其中编写以下代码:
using System;
using System.Web.UI;
using System.Web.UI.Adapters;
public class ServerSideViewStateAdapter : PageAdapter
{
public override System.Web.UI.PageStatePersister GetStatePersister()
{
return new SessionPageStatePersister(this.Page);
}
}
您可以参考此视频,它可以帮助您: