2012-02-05 2 views
0

Я использую популярный jQuery плагин Masonry, чтобы соответствовать моим колонкам красиво в моем макете. Я использую setInterval, чтобы решить ту же самую проблему, как было BoltHead здесь: JQuery, setTimeout not workingМожет ли setInterval резко снизить производительность браузера?

Решение использовать SetTimeout для обновления кладки плагин каждый второй, как это:

$(function() { 
    setInterval(update, 500); 
}); 

    function update() { 
     var $container = $('#packages'); 
     $container.imagesLoaded(function(){ 
      $container.masonry({ 
      itemSelector : '.mainPackage', 
      columnWidth : 316, 
      singleMode: true, 
      gutterWidth: 15 
      }); 
     }); 
    } 

Это плохая идея, насколько производительность браузера? Я бы подумал, что jquery, выполняющий эту довольно здоровенную функцию каждую секунду, замедлит работу. Это плохая практика? Причина, по которой я это делаю, заключается в том, что я использую .slideToggle, чтобы вырезать больше контента, тем самым потребовалась кладка для корректировки макета. Любые мысли об этом решении?

+0

Почему вы не обновляете только при добавлении нового контента? –

+0

как в, обновление при нажатии slideToggle? – JCHASE11

+0

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

ответ

3

slideToggle получает обратный вызов в качестве второго аргумента, поэтому обновить плагин там, что-то вроде этого:

slideToggle(time, function(){ 
    update(); // this is your "update" function from question example 
}); 

и да, это плохая идея, чтобы сделать это обновление периодически без причины.

+0

Да, обратный вызов slidetoggle - намного лучшее решение, спасибо! – JCHASE11

0

По моему опыту, запуск чего-то подобного замедляет работу браузера. Вы можете не заметить его сначала, но чем дольше работает скрипт, тем хуже он получит. Мне очень нравится @vucetica ответ.

0

Это зависит только от того, сколько блоков требуется плагину для «масонства». Если у вас есть что-то вроде 20-50 блоков, будет без проблем запускать обновление каждые 500 мс. Это из моего личного опыта в деле, точно так же, как ваше.

Смежные вопросы