Страница ASP.NET содержит динамические элементы, загрузка занимает время - PullRequest
1 голос
/ 10 февраля 2010

Я динамически создаю таблицу флажков на моей странице test.aspx. Измерения (количество строк и столбцов) таблицы определяются путем запроса к базе данных.

На странице test.aspx я делаю следующее:

<script language="C#" runat="server">

protected void Page_Load ( object src, EventArgs e ) {
   //Query the database to get the data for rows and columns

   CheckBox[] chkBox = new CheckBox[rows * columns]; //creates a collection of checkboxes

   //Iterate over the query set in a double for loop to create dynamic checkboxes
}

</script>

Сейчас у меня есть количество строк = 20 и столбцов = 10, но оно может увеличиться (с большей вероятностью для столбцов).

Я использовал вкладку Net в Firebug, чтобы определить время, затрачиваемое на различные события, и обнаружил, что GetTest.aspx занимает около 4 минут, что слишком долго ждать.

Есть ли способ сократить время загрузки страницы? Правильный ли мой подход к созданию динамических флажков?

Заранее спасибо.

ура

Ответы [ 4 ]

3 голосов
/ 11 февраля 2010

Я смотрю на этот комментарий:

// Query the database to get the data for rows and columns

Вы игнорируете это, но 9 раз из 10, когда веб-страница загружается медленно, потому что она выполняет некоторую медленную работу с базой данных.

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

ASP.NET может создать тысячи флажков менее чем за 1 секунду. Это просто классная реализация. Проблема в другом месте.

1 голос
/ 11 февраля 2010

Включите трассировку ASP.NET на странице и посмотрите, где все время тратится. Четыре минуты, конечно, слишком много для любой страницы. Вы перечислите два, хотя ... test.aspx и GetTest.aspx ... что такое GetTest.aspx?

РЕДАКТИРОВАТЬ:
Хорошо, вы не рассказываете нам всю историю здесь. Что еще делает эта страница? Куда идут эти элементы управления? Я только что попробовал это на тестовой странице, используя код, похожий на приведенный выше, и он рендерится за доли секунды.

Как я уже сказал ... включите TRACE и узнайте, что на самом деле происходит все время! Используйте инструмент, вот почему он там.

0 голосов
/ 11 февраля 2010

Попробуйте отключить Firebug и посмотрите, сколько времени это займет. Также дважды проверьте, чтобы ваш код не генерировал больше флажков, чем вы ожидали.

0 голосов
/ 10 февраля 2010

Создание элементов управления (CheckBox) и добавление в держатель со стороны сервера очень недорого. Учитывая, что вы не создаете миллиарды .

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

Пожалуйста, проверьте размер сгенерированного HTML, чтобы проверить его массу.

На вашем месте я написал бы следующий код на моем сервере. Пожалуйста, примите во внимание.

protected void Page_Load(object src, EventArgs e) {
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < columns; j++) {
            holderPanel.Controls.Add(
                    new CheckBox { 
                            ID = string.Format("chk{0}{1}", i, j), 
                            Text = "some text"
            });
        }
    }
}

Рассмотрим holderPanel на стороне сервера asp:Panel или простой Div с ID = "holderPanel" и runat="server"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...