Я поддерживаю сайт ASP.NET, где пользователи могут войти в систему, чтобы зарегистрировать некоторый набор данных (для статистических целей). Один пользователь регистрирует данные для набора единиц, и для каждого из этих единиц должен быть заполнен набор форм (с несколькими полями в каждой форме, но здесь это не имеет значения). Один сценарий состоит в том, что у пользователя есть 12 единиц, и в каждой из этих единиц есть 25 форм, которые должны быть заполнены, что означает в общей сложности 300 форм.
Страница ASP.NET для регистрации этих данных создается следующим образом: каждая форма находится на панели, которая может быть свернута с помощью AjaxControlToolkit CollapsiblePanelExtender, а все формы в модуле находятся внутри другой панели, которая также может быть свернута. В результате у вас есть древовидная структура с единицами сверху, и под каждым блоком вы можете развернуть набор форм, и далее каждая форма может быть расширена для заполнения данных (страница загружается со всеми свернутыми панелями). по умолчанию).
Страница генерируется полностью динамически (поскольку формы могут быть добавлены в базу данных), и для генерации CollapsiblePanelExtenders у меня есть следующий код:
private CollapsiblePanelExtender GenerateCollapsiblePanelExtender(string id, Panel headerPanel, Panel contentPanel)
{
CollapsiblePanelExtender collapsiblePanel = new CollapsiblePanelExtender();
collapsiblePanel.ID = id + ID_COLLAPSIBLE_PANEL_POSTFIX;
collapsiblePanel.TargetControlID = contentPanel.ID;
collapsiblePanel.CollapseControlID = headerPanel.ID;
collapsiblePanel.ExpandControlID = headerPanel.ID;
collapsiblePanel.Collapsed = true;
collapsiblePanel.BehaviorID = collapsiblePanel.ID + ID_BEHAVIOUR_POSTFIX;
return collapsiblePanel;
}
С одним пользователем, имеющим 12 единиц с 25 формами в каждом, это означает всего 312 CollapsiblePanelExtenders. Как я уже сказал, по умолчанию все они свернуты, но вот проблема:
Когда страница загружается, все они кажутся развернутыми, и затем браузер «начинает их сворачивать». Однако это занимает очень долгое время (в Firefox я даже получаю предупреждение о не отвечающем скрипте, IE и Chrome работают только вечно, но без предупреждения). Когда все «свертывания» завершены, можно плавно открывать и закрывать отдельные панели, но пользователи жалуются на чрезвычайно медленную начальную загрузку.
Так что мой вопрос прост: есть ли способ оптимизировать это так, чтобы загрузка прошла более гладко? Например, возможно ли изначально загружать только панели заголовков в каждом CollapsiblePanelExtender, а затем каким-то образом асинхронно загружать панель содержимого?
Одно окончательное уточнение:
Я знаю, что я мог бы просто изменить дизайн страницы, включив в нее только одну единицу, и, таким образом, значительно сократить размер содержимого, но я надеюсь избежать этого (пользователи предпочитают, чтобы все было на одной странице). Это также означало бы довольно большие изменения в логике страницы (да, я знаю - это плохая кодовая база на тот момент)