#jquery #asp.net #performance #updatepanel
#jquery #asp.net #Производительность #панель обновления
Вопрос:
Итак, эта известная проблема с потерей привязок jquery на asp.net обновление updatepanel содержит много деталей при поиске в Google / SO.
Есть несколько предложенных решений. Вот код, который у меня есть для начальной настройки jquery carousel.
$(function() {
$('.carousel-sizes').jcarousel({ scroll: 3 });
$('.carousel-pics').jcarousel({ scroll: 1 });
});
Который работает нормально. Однако при попадании на панель обновления она ломается, поскольку привязки jquery, по-видимому, теряются. Итак, вот исправление, которое я применил.
if (typeof (Sys) != "undefined") {
prm = Sys.WebForms.PageRequestManager.getInstance();
Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(InitializeRequest);
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequest);
}
function InitializeRequest(sender, args) {
}
function EndRequest(sender, args) {
$('.carousel-sizes').jcarousel({ scroll: 3 });
$('.carousel-pics').jcarousel({ scroll: 1 });
}
Который работает, но панель обновления теперь работает недопустимо медленно.
Это страница .net 3.5, использующая главную страницу, scriptmanager объявлен на главной странице (на всякий случай для параметра EnablePartialRendering установлено значение true), а код javascript либо на главной странице, либо на странице содержимого (без разницы, поскольку он медленный на любой странице). Последняя версия Jquery.
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js" type="text/javascript"></script>
Я добавил приведенный выше код либо на главную страницу, либо на страницу содержимого вверху, и это не работает. Добавьте это в нижнюю часть любой страницы (непосредственно перед тегом закрытия тела или тегом закрытия СОДЕРЖИМОГО), и это работает, но бесполезно медленно.
Я отладил, и моя страница не выполняет ничего интенсивного с точки зрения .net, отладка проходит через соответствующие события, а затем зависает примерно на 3-4 секунды, прежде чем панель обновления обновится.
Есть идеи?
Ответ №1:
Я не уверен, решит ли это вашу проблему, но ASP.NET предоставляет событие, которое вы можете использовать для привязки обработчиков событий после изменения UpdatePanel. Кроме того, было бы разумно определить некоторый контекст для селектора jQuery, чтобы избежать обхода DOM всей вашей страницы. Попробуйте определить следующий метод.
function pageLoad() {
var panel = $("#<$= UpdatePanel.ClientID %>");
$('.carousel-sizes', panel).jcarousel({ scroll: 3 });
$('.carousel-pics', panel).jcarousel({ scroll: 1 });
}
Вам нужно будет изменить панель обновления.Идентификатор клиента соответствует идентификатору вашего элемента управления UpdatePanel.
Комментарии:
1. Метод загрузки страницы работает, но он работает так же медленно. Должно быть, на странице что-то другое, потому что элементы .net выполняются за миллисекунды, но при рендеринге на каждое обновление панели обновления уходит 3-4 секунды.
2. Странная вещь здесь в том, что при начальной загрузке и до того, как я добавил jquery carousel, эта панель обновления загружалась очень быстро, обновления обрабатывались очень быстро. Теперь с помощью этой карусели она изначально рендерится очень быстро, но затем теряет привязки и перестает работать. Добавление метода pageLoad сортирует привязки, но панель обновления замедляется до обхода.