如何加快此页面的速度?

时间:2011-08-11 21:18:37

标签: c# javascript asp.net performance webforms

我有一个ASP.Net WebForms页面,它有2个下拉列表(1个有10个选项,另一个有大约600个)和大约5个面板。根据从下拉列表中选择的值,通过查询数据库,可以在异步回发期间使其他面板可见或不可见。

我的困境是:在慢速连接上页面速度不够快,特别是在页面加载期间。查看渲染页面时,即使在初始加载时,viewstate的大小也很大。此外,还有大量数据需要填充下拉列表,这可能会影响视图状态。

有什么建议可以加快这个页面的速度吗?

6 个答案:

答案 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); }
}