2017-01-05 3 views
0

Что было бы лучшим решением по производительности - выполнение функции каждые 100 мс через setInterval или выполнение функции при прокрутке страницы? Я только что проверил, и один свиток может вызвать выполнение функции более 50 раз. Установка setInterval на 100 мсек приведет к тому, что функция будет выполняться только 10 раз в секунду, но в нижней части функция будет выполняться, даже если страница не прокручивается.Производительность - window.onscroll vs setInterval

Функция довольно прост (checkes window.pageYOffset и изменяет стиль, если это более 100)

+0

Почему не прокрутка? http://www.w3schools.com/jquerymobile/event_scrollstop.asp – deweyredman

+0

мои извинения, это делает предположение, что вы используете jquery ... – deweyredman

+0

Не беспокойтесь, я думаю, что даже проверю на startscroll + setInterval позже. – Vortic

ответ

2

Это звучит как работа для debounce функции. Такая скорость метода ограничивает вызов функции.

Вы упомяните о единственном прокрутке, ударяющем ваш обратный вызов более 50 раз. Используя debounce, обратный вызов не будет вызываться до тех пор, пока функция debounce НЕ будет вызываться в течение определенного времени. (В приведенном ниже примере 300мс)

var scrollHandler = debounce(function() { 
    // your window.pageYOffset logic 
}, 300); 

window.addEventListener('scroll', scrollHandler); 

Гораздо более полное объяснение и пример debounce функцию можно найти по адресу:

https://davidwalsh.name/javascript-debounce-function

или

Can someone explain the "debounce" function in Javascript

Используя такое подход сделает более оптимизированное количество вызовов и только тогда, когда страница будет взаимодействовать d (звучит так, как это происходит при прокрутке страницы).

+0

Звучит здорово, но я получаю сообщение об ошибке «Uncaught ReferenceError: debounce is not defined». И я думаю, что вам не хватает одной точки с запятой - после «300»). – Vortic

+0

Проверьте эту ссылку, есть пример функции debounce, которую вам нужно определить/добавить в свой проект. (Хороший улов, исправит эту точку с запятой!) – roger

+0

Добавлена ​​дополнительная ссылка на хороший пост в stackoverflow. – roger

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