【问题标题】:Why do my ASP.NET pages render slowly when placed on the server?为什么我的 ASP.NET 页面放置在服务器上时呈现缓慢?
【发布时间】:2010-10-18 08:32:39
【问题描述】:

我有一个带有 GridView 控件的简单 aspx 页面。单击按钮后,我正在加载带有搜索结果的 GridView。一切正常,但浏览器上的 HTML 渲染在 IE 中非常慢,结果集 > 2000(在其他浏览器中工作正常。)我意识到由于记录数,它很慢,但有没有办法让它更快? (我不想使用分页。)

奇怪的是,只有当它托管在 Windows 2003 服务器上时,它才会变得很慢。它在我的本地主机上运行良好,但在测试站点或生产环境中,都会出现问题。如果我将桌面远程连接到我的测试服务器并在本地运行它,则页面加载正常。仅当我从本地计算机运行服务器托管应用程序时才会出现此问题。

我该如何解决这个问题?

【问题讨论】:

    标签: .net asp.net optimization performance


    【解决方案1】:

    从本地主机传输时它工作正常,因为不存在网络瓶颈——一些浏览器在尝试渲染之前等待整个表传输——尤其是在不使用固定列宽时(这可以提高性能);你看过整个生成页面的大小吗?

    【讨论】:

    • 在“查看源代码”中,没有太多的ViewState。仅生成了大约 2500 行的 HTML 表。你认为我应该怎么做才能让它快一点?谢谢。
    • 我保存了“查看源”文件,大小为 1.59 MB。
    • 哎哟。这是非常大的。也许你应该考虑分页结果
    • 还要确保源在通过网络传输时被压缩。
    【解决方案2】:

    一些简单的建议,关闭该控件的视图状态。您是否也在使用 MS AJAX,这也可能导致问题。如果您愿意,请将其从更新面板中取出。

    【讨论】:

    • 感谢您的回复。 ViewState 已经关闭。我没有在该页面上使用 AJAX。该页面除了一个简单的 GridView 控件外什么都没有......请帮忙。
    【解决方案3】:

    如果您需要控件上的 ViewState,您可以通过在 PreRender 事件中禁用每一行的 ViewState 来减少 GridView 对页面的 ViewState 影响:

      Private Sub grid_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles grid.PreRender
    
        For Each item As DataGridItem In grid.Items
          item.EnableViewState = False
        Next
    
      End Sub
    

    【讨论】:

      【解决方案4】:

      如果你还没有压缩 HTTP 响应,你应该look into doing that

      • 查看 Yslow for FireFox(从这里开始)
      • 使用标准 gzip/deflate 压缩来压缩您的响应
      • 尽你所能减少 GridView 中的数据量。消除不必要的列等。
      • 关闭视图状态
      • 使用 jsmin 减小 JavaScript 文件的大小(如果有)
      • 减小 CSS 的大小(如果有)

      【讨论】:

        【解决方案5】:

        由于在这种情况下网络是瓶颈,因此请尝试缩小生成的 HTML。显然,每个网格行的权重平均约为 640 字节(2500 条记录生成 1.6M 有效负载)。看看是否可以通过删除不必要的空格和缩短任何 HTML 元素 ID 来减少它。如前所述,将样式(如果有)从网格移动到 CSS。如果网格呈现任何 URL(例如,锚点中的“href”或图像中的“src”)尝试缩短它们。此外,如果 GridView 呈现的 HTML 不是最佳的,请查看您是否可以自己呈现。为了估计生产中的预期页面响应时间,请考虑您的平均用户网络速度(可能与您机器的网络速度不同)。

        如果以上都没有产生令人满意的结果,您可以查看我们提供的解决方案 - 名为 Web Stimulus 的 ASP.NET 加速器。它在客户端上部分执行 ASP.NET 页面代码以在客户端计算机上呈现 HTML。典型的流量减少是 10-20 倍,代码更改最少。

        【讨论】:

          【解决方案6】:

          简而言之,做自定义分页,这样它就不会在页面加载时加载所有项目。 Linq 数据源为您完成。

          【讨论】:

            【解决方案7】:

            为什么不想使用分页? 1.6 MB 对于页面的 html 来说已经很多了。

            考虑到您已经禁用了视图状态,请考虑通过以下方式减少 html 的数量:

            • 删除不必要的列
            • 仅使用 css 来设置网格视图的样式。我们的想法是不要在整个 HTML 中重复相同的视觉规则。
            • 避免在列中进行不必要的标记。查看您可能拥有的任何模板列,并简化其中的 HTML(也使用 css 对其进行样式设置)。

            【讨论】:

              猜你喜欢
              • 2021-12-26
              • 1970-01-01
              • 2017-02-13
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-01-08
              • 1970-01-01
              相关资源
              最近更新 更多