У нас есть макет страницы, как показано ниже, с обработчиком jQuery для большого количества элементов HTML (тысячи DIV).
Макет выглядит так:
Navbar содержит как минимум 2000+ DIVs и UL, LI (используется для навигации по содержимому), и мы связываем обработчик события jQuery с каждым элементом:
$('.navbar-item').click(function(){
/* click handler */
});
Потребовалось много раз, чтобы загрузить, а на IE производительность ужасная !!! В любом случае мы можем его улучшить? или любой альтернативный дизайн для решения этой проблемы?
У вас есть много возможностей улучшить выступления
1.
Вы можете загрузить div, только когда пользователь прокручивает и использует Ajax
2.
используйте .on
а не .click
чтобы добавить слушателя динамически
Например, вы можете загрузить некоторый div
и проверить прокрутку, использовать эту функцию от James Padolsey, она работает во всех браузерах
function getDocHeight() {
var D = document;
return Math.max(
Math.max(D.body.scrollHeight, D.documentElement.scrollHeight),
Math.max(D.body.offsetHeight, D.documentElement.offsetHeight),
Math.max(D.body.clientHeight, D.documentElement.clientHeight)
);
}
$(window).scroll(function() {
// when the scroll is in bottom
if($(window).scrollTop() + $(window).height() == getDocHeight()) {
// use ajax to get more div
$.ajax({
url: "otherDivs.php", // page where you load div
data { firstDiv : '10', secondDiv : '20'}, // parameters : To load div 10 to 20
type: "POST"
})
.done(function( html ) {
$( "body" ).append( html ); // html contain div 10 to 20
});
}
});
Это всего лишь несколько способов помочь вам
Вы также можете использовать функцию (http://api.jquery.com/on/)
например:
$('div.navbar').on('click', '.navbar-item', function(){
/* click handler */
});
Уменьшите количество узлов на странице. Загружайте только то, что пользователю нужно немедленно, ленивая загрузка, когда пользователь прокручивает вниз или открывает уровень навигации (в случае, если у вас есть складное дерево).
Если обработчик кликов одинаковый для большего количества элементов вместо использования:
$('.navbar-item').click(function(){
/* click handler */
});
вы можете сделать это:
var functionNav = function(){
/* click handler */
}
$('.navbar-item').on("click", functionNav)
Если функции схожи, вы можете также параметризовать функцию, чтобы выполнять больше задач.