Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Сокращение времени загрузки страницы ASP.NET WebForms с большими таблицами

Автор вопроса: JoelОтветов: 2

У меня есть страница WebForms с древовидным представлением слева и сетками справа. Когда пользователь щелкает узел древовидного представления, соответствующая сетка заполняется с помощью SqlDataSource, а затем отображается. Все это находится в одной панели UpdatePanel.

Вот моя установка:

<asp:GridView runat="server" ID='LocationsRowGrid' AutoGenerateColumns="false" DataSourceID="SqlDataSource_LocationRow">
    <Columns>
        <asp:TemplateField HeaderText="Location">
                <ItemTemplate>
                    <asp:DropDownList runat="server" ID="NAME_LCTN" OnDataBound="dropdown_DataBound"
                        DataTextField="NAME_TO_LCTN" DataValueField="NAME_TO_LCTN" DataSourceID="SqlDataSource_LocationNames">
                    </asp:DropDownList>
                </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Move Time (HR)">
            <ItemTemplate>
                <asp:TextBox runat="server" ID="STD_MOVE_TME_AMNT" Text='<%# Bind("STD_MOVE_TME_AMNT") %>'></asp:TextBox>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="LAST_UPDATED_BY" HeaderText="Updated By" Visible="true" />
        <asp:BoundField DataField="LAST_REV_DT" HeaderText="Revision Date" Visible="true" />
    </Columns>
</asp:GridView>

Есть и другие (более крупные) сетки, но это в основном шаблон. Самая большая сетка имеет около двенадцати столбцов, примерно шесть из которых являются шаблонными полями с текстовыми полями, а один из них - шаблонным полем с раскрывающимся списком. Выпадающий список привязан к другой таблице, которая содержит около 150 элементов. Сама сетка насчитывает около 100 записей.

Это медленно. Похоже, что проблема может быть связана с рендерингом HTML - сервер не слишком долго отвечает, но браузеры (Chrome и IE) почти падают, пытаясь отобразить результат. Мое первое (очевидное) предположение заключается в том, что рендеринг 100 html-выборов, каждый из которых содержит> 100 элементов, будет медленным, особенно если это делается сразу внутри тегов таблиц, таких как ASP.NET.

Кажется ли это разумным предположением о причине медлительности?

Для этого проекта мне (в настоящее время) не разрешено использовать jQuery (или, предположительно, любую другую библиотеку javascript), и я должен оправдать любой используемый мной javascript. По сути, другим разработчикам не нужно какое-либо реальное понимание javascript, чтобы иметь возможность поддерживать это приложение, когда я закончу с ним.

Учитывая эти ограничения, могу ли я что-нибудь сделать, чтобы уменьшить размер возвращаемого HTML и/или время рендеринга в браузере? Заранее спасибо.

  • Ваш gridview должен быть в UpdatePanel? Пойдите и прочитайте о том, как на самом деле работают панели обновлений, и что отправляется и принимается с сервера... Emyr 17.06.2011

htmlperformancewebforms

Ответы

Ответ 1 · Gregory A Beamer

Моя идея состоит в том, чтобы уменьшить количество связанных данных на начальной странице и установить пейджинг. Если это не "отчет", пользователю не нужно одновременно видеть каждую строку.

Другая возможность заключается в том, что вы настроили страницу так, чтобы она также использовала состояние просмотра для сетки. Если это так, вы тратите время на привязку, чтобы создать состояние просмотра перед рендерингом (по крайней мере, в ситуации по умолчанию).

Кроме того, я согласен с @n8wrl в том, что вам нужно устранять неполадки, изолируя, действительно ли проблема заключается в рендеринге. Я бы, вероятно, сделал это с помощью трассировки, а не отключения, но вы должны убедиться, что проблема заключается в рендеринге. Другой элемент управления, например повторитель, может работать, но я вижу в этом преимущество только с чем-то вроде CSS, который уменьшает количество размеченных данных для вывода.

Сжатие потока ответов в IIS также может ускорить процесс. Время рендеринга останется прежним, но вы сократите время на отправку HTML-кода в браузер, что, по крайней мере, является частью вашей проблемы.

Ответ 2 · n8wrl

Несколько мыслей для вас:

  1. "Отключите" рендеринг, чтобы увидеть, сколько времени отклика приходится на запросы на стороне сервера. Вы можете сделать это, закомментировав операторы DataSource=.
  2. Браузеры, как правило, ждут, пока не будет создана вся таблица, прежде чем отображать какую-либо ее часть. Вы можете попробовать разные макеты, чтобы не все было в одной таблице. Может быть, повторитель, где каждый элемент представляет собой отдельную таблицу? Затем каждый из них может отображаться по мере появления разметки.
  3. Вы можете начать гораздо больше интересоваться jQuery и AJAX для страниц вашего контента. Вместо 100 рядов может быть 10 рядов со страницами 1, 2, 3... ссылками?

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы