Как улучшить производительность JavaScript / уменьшить нагрузку на страницу с большим HTML?

0

У нас есть макет страницы, как показано ниже, с обработчиком jQuery для большого количества элементов HTML (тысячи DIV).

Макет выглядит так:

Изображение 174551


Navbar содержит как минимум 2000+ DIVs и UL, LI (используется для навигации по содержимому), и мы связываем обработчик события jQuery с каждым элементом:

$('.navbar-item').click(function(){ 

  /* click handler */

});

Потребовалось много раз, чтобы загрузить, а на IE производительность ужасная !!! В любом случае мы можем его улучшить? или любой альтернативный дизайн для решения этой проблемы?

Теги:
performance
huge-pages

4 ответа

2

У вас есть много возможностей улучшить выступления

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
           });
       }
   });

Это всего лишь несколько способов помочь вам

2

Вы также можете использовать функцию (http://api.jquery.com/on/)

например:

$('div.navbar').on('click', '.navbar-item', function(){ 

  /* click handler */

});
  • 2
    Как это помогает с производительностью?
  • 0
    Просто, нажмите изменить дерево DOM, чтобы сделать это динамически. Но не используйте событие click для html-объекта, но только для div.navbar.
1

Уменьшите количество узлов на странице. Загружайте только то, что пользователю нужно немедленно, ленивая загрузка, когда пользователь прокручивает вниз или открывает уровень навигации (в случае, если у вас есть складное дерево).

0

Если обработчик кликов одинаковый для большего количества элементов вместо использования:

$('.navbar-item').click(function(){ 

    /* click handler */

});

вы можете сделать это:

var functionNav = function(){
    /* click handler */
}

$('.navbar-item').on("click", functionNav)

Если функции схожи, вы можете также параметризовать функцию, чтобы выполнять больше задач.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню