Сокращение времени загрузки страницы ASP.NET WebForms с большими таблицами - PullRequest
0 голосов
/ 17 июня 2011

У меня есть страница 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 и / или времени рендеринга в браузере?Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 17 июня 2011

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

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

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

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

0 голосов
/ 17 июня 2011

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

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