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

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

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

введите описание изображения здесь


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

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

  /* click handler */

});

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

4 ответа

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

1. Вы можете загрузить div только тогда, когда пользователь прокручивает и использует Ajax

2. использование .on и не .click динамически добавлять слушателя

Например, вы можете загрузить некоторые div и проверьте прокрутку, используйте эту функцию от Джеймса Падольси, она работает во всех браузерах

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)

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

Другие вопросы по тегам