AjaxControlToolkit combobox заменитель для большого количества предметов - PullRequest
0 голосов
/ 01 сентября 2011

У меня есть местоположение, использующее наше веб-приложение ASP.NET 4.0, которое работало нормально около 2 лет.Я вышел на сайт, чтобы выполнить обновление, и обнаружил, что одна из страниц будет просто пустой, а IE 8 перестанет отвечать.После расследования я обнаружил, что в одном из списков на странице было более 8000 предметов.Страница прекрасно загружалась в IE7, IE9, Firefox и Chrome.Я посмотрел документацию на этом сайте Ajax Control Toolkit, и мне сказали, что я должен использовать Auto Complete Extender, поскольку у меня такое большое количество записей.Я полагаю, это лишь вопрос времени, когда он не работает ни в одном браузере.Средство использует IE8, так что в настоящее время они работают в режиме совместимости;Затем я сказал им начать удалять старые записи, которые им больше не нужны.Однако мне нужно начать работать над заменой.Проблема с Auto Complete Extender заключается в том, что он не работает так, как выпадающий список.Кто-нибудь знает хороший подход?Мне нужно сохранить стиль DataSource и DataBinding в коде.Кроме того, редизайн не вариант.Мне нужен этот список, чтобы в нем содержались все посетители любого объекта.

1 Ответ

2 голосов
/ 01 сентября 2011

С 8000 элементов я бы порекомендовал элемент управления, который заполняется и фильтруется по требованию (не для Page_Load), и не сохраняет все элементы в ViewState.

К сожалению, заполнение и фильтрация по требованию противоречат сохранению стиля DataSource и DataBinding. Осталось только попытаться использовать элемент управления с EnableViewState = "false" и минимизировать размер страницы всеми доступными способами, в первую очередь с помощью сжатия. В IIS включает динамическое сжатие . Я не думаю, что эти шаги помогут решить проблему с производительностью, но вы должны начать с анализа размера страницы с помощью YSlow или других инструментов. Например, если на странице есть необязательные элементы, такие как специальные пользовательские списки, убедитесь, что фактически заполнены только те, которые используются. У меня были ситуации, когда мне удавалось больше половины размера страницы, не заполняя неиспользуемые элементы управления и отключая ViewState для них. Установка Visible = "false" была недостаточной.

Что касается альтернатив, я использовал Telerik RadCombobox с аналогичным количеством предметов и проблемами с производительностью. Установка EnableViewState = "false" значительно улучшила скорость обратной передачи, но время загрузки все еще было неприемлемым. Помогло переключение на загрузка по требованию , но возникли новые проблемы с сохранением выбранного состояния без ViewState. Заполнение поля со списком по требованию означает, что привязка данных выполняется в событии ItemsRequested каждый раз, когда поле со списком открывается в пользовательском интерфейсе. Это примерно так же, как использование обычного TextBox с AutoCompleteExtender и метода страницы. Вы, вероятно, могли бы повторно использовать большую часть кода привязки данных времени Page_Load здесь.

В целом, у меня был лучший опыт с jQuery UI autocomplete и Ajax-запросами, но это потребовало бы более обширного редизайна.

...