我有一个ASP.Net WebForms页面,它有2个下拉列表(1个有10个选项,另一个有大约600个)和大约5个面板。根据从下拉列表中选择的值,通过查询数据库,可以在异步回发期间使其他面板可见或不可见。
我的困境是:在慢速连接上页面速度不够快,特别是在页面加载期间。查看渲染页面时,即使在初始加载时,viewstate的大小也很大。此外,还有大量数据需要填充下拉列表,这可能会影响视图状态。
有什么建议可以加快这个页面的速度吗?
答案 0 :(得分:2)
也许按需加载第二个下拉列表的选项(例如使用AutoComplete of the AJAX control toolkit或类似的控件)。
答案 1 :(得分:2)
您可以禁用页面的事件验证,这样可以减轻视图状态的负载(这是初始加载时大量视图状态的原因)。事件验证可确保在渲染之前已注册受约束输入(下拉列表,复选框列表,单选按钮列表)中的每个选项。该信息与视图状态一起被序列化 - 它肯定会杀死你。
您还可以在600项下拉列表中使用不同的方法进行选择。也许你可以在这里提供一个AJAX自动完成文本框,而不是一个下拉菜单或者一些搜索工具,供用户搜索和查看他们在600项目的列表中找到的N个匹配。
对我而言,600对于下拉菜单来说太多了,如果你再多花一点时间来动态缩小用户的选择,你可以获得更多的带宽降价...但是,是的,我的关于设计的意见除外,如果你禁用页面的事件验证,你会立刻看到一个巨大的减少......
<%@ Page Title="Home Page" EnableEventValidation="false" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" ... more attribs ... />
答案 2 :(得分:0)
如果可以,请在各自的DropDownList
个活动中填充Init
个控件。这样,它们的选项将不会存储在ViewState中。这可以节省相当多的字节。
或者更好的是,你可以完全取消关闭ViewState吗?
答案 3 :(得分:0)
gzip html和json,减少元素数量和anidation,简化html,etceteras以减少流量和渲染的延迟
答案 4 :(得分:0)
你可以做各种各样的事情来实现表现!
1)看看Yahoo's performance rules让你入门。这些通常是帮助加快您网站速度的最佳做法列表。
2)看看Chromes Inspector(设置 - &gt;工具 - &gt;开发人员工具)或其他浏览器的等价物(firefox中的Firebug,我相信IE9也有工具)来找出主要痛点在哪里是。他们将向您展示从文件大小到请求数量和页面加载细分的所有内容。
3)根据需要调查AJAX和延迟加载内容。加载时间仍然存在,但用户
会更加明显4)检查查询的效果,看看是否可以优化它们。
希望这有帮助!
答案 5 :(得分:0)
如果请求接受zip或deflate,则让您的回复返回。
var response = HttpContext.Current.Response;
string acceptEncoding = HttpContext.Current.Request.Headers["Accept-Encoding"] ?? "";
if (acceptEncoding.Contains("gzip"))
{
response.Filter =
new System.IO.Compression.GZipStream(response.Filter,
System.IO.Compression.CompressionMode.Compress);
response.AppendHeader("Content-Encoding", "gzip");
}
else if (acceptEncoding.Contains("deflate"))
{
response.Filter =
new System.IO.Compression.DeflateStream(response.Filter,
System.IO.Compression.CompressionMode.Compress);
response.AppendHeader("Content-Encoding", "deflate");
}
将ViewState
移至会话中。在基页类上重写此属性。
protected override PageStatePersister PageStatePersister
{
get { return new SessionPageStatePersister(this); }
}