Правильно сформированный HTML в виде строки в Div на .Net веб-форме рендерится намного медленнее - PullRequest
0 голосов
/ 03 марта 2011

Я, очевидно, случайно создал зверя, который был бы признателен за идеи о том, где искать альтернативы или как я мог бы определить проблему. (Это приложение на C # .Net 3.0.)

У меня есть главная страница, которая содержит 4 текстовых поля. Когда пользователь вводит текст в одно из текстовых полей, он запускает вызов JavaScript, чтобы обновить страницу результатов поиска, которая находится внутри IFrame на главной странице.

Когда страница результатов поиска загружается, вызывается свойство '<% = results%>', которое вызывает функцию поиска. Функция поиска извлекает строку XML из базы данных SQL Server, загружает ее в XmlDocument и преобразует выходные данные с помощью XLST в stringWriter обратно в свойство «results».

Вывод XSLT представляет собой таблицу с примерно 24 столбцами, javascript в строке щелкните, чтобы выделить строку, и несколько ссылок в каждой строке для перехода на новый экран для редактирования выбранной записи.

Работает своевременно до 100 рядов. Когда он достигает 200 строк таблицы, время задержки становится заметным. При 500 строках рендеринг занимает около 12-15 секунд, а при 1000 строках это занимает 90 секунд. Возможно 3000 записей, и пользователь хотел бы иметь возможность возвращать все строки для сортировки, анализа и, возможно, экспорта; поэтому мне нужна лучшая ловушка для мыши.

Задержка полностью связана с отображением в браузере в Internet Explorer 8.0. В Google Chrome на 1000 строк уходит примерно 7 секунд. Кроме того, я использовал дополнительный тестовый код, чтобы записать вывод html из преобразования xslt в файл, чтобы убедиться, что вывод сформирован правильно и проблем не замечено. Я перешел к сохраненному файлу на своем локальном компьютере с 1000 строками в новом окне браузера, и загрузка в браузер занимает приблизительно 5 секунд; Итак, я действительно в растерянности, почему для загрузки непосредственно в веб-форму в IFrame требуется 90 секунд.

Кто-нибудь знает, что может происходить и как решить проблему? Есть ли лучший способ взломать этот орех? Было бы лучше, если бы я сохранил вывод XSLT в файл и загрузил его в IFrame? Или, может быть, я должен отказаться от xslt и просто использовать цикл response.Write?

1 Ответ

0 голосов
/ 03 марта 2011

Я полагаю, что вы убили проблему с помощью старого неоптимизированного решения.

Прежде всего, я бы указал на факт зачем использовать подход iframe, если AJAX является его современным, поддерживаемым и оптимальным решением? .

Обработка сервера должна выполняться с помощью некоторой службы - возможно, Windows Communication Foundation, с привязкой HTTP и размещенной в службах IIS, - и она может использовать сериализатор контрактов данных JSON. Количество возвращаемых данных будет уменьшено, и это очень легкое общение, резко увеличивающее производительность / использование сети.

Работа с JSON делает подобное проще. Ваши результаты будут представлены в виде объектов JavaScript, поэтому преобразование результатов JSON в созданные DOM-элементы времени выполнения просты: просто повторяйте результаты и используйте jQuery для быстрого создания строк таблицы (или вы можете переключиться на ASP.NET 4.0 и Преимущество привязки данных на стороне клиента (http://msdn.microsoft.com/en-us/magazine/cc972638.aspx) и сделать его еще проще (я не знаю, можете ли вы это сделать, это всего лишь предложение !!).

Вызвать службу WCF с поддержкой JSON с помощью jQuery или любого другого клиентского API JavaScript легко, это сэкономит вам время на разработку и невероятно увеличит производительность и скорость реагирования вашего приложения.

Здесь приведен пример ASP.NET 3.5 для работы с WCF, JSON и вызовами сервисов на стороне клиента. http://dotnetslackers.com/articles/ajax/JSON-EnabledWCFServicesInASPNET35.aspx

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