@ilovemaryjane

Оптимизирует ли браузер/javascript исполнение кода в этом случае?

К примеру, при скролле вниз выполняется такой код

el.style.position = 'fixed'

Естественно не имеет смысла добавлять 'fixed' к элементу который уже 'fixed'. Да еще и на каждый скролл, т.е. сотни, тысячи операций.

Имеет ли смысл это как-то оптимизировать? Или браузер сам это делает?
Если да, то как оптимизировать? Если навесит туда еще прежде проверку есть ли стиль, то выглядит как двойная работа теперь. Как вариант, думал делать флаг fixed = true после успешного добавления стиля, и потом выполнять простую if проверку, но все равно получается эта проверка будет проводится каждый раз, и лишняя лапша в коде...
  • Вопрос задан
  • 74 просмотра
Пригласить эксперта
Ответы на вопрос 4
Stalker_RED
@Stalker_RED
Да еще и на каждый скролл, т.е. сотни, тысячи

Можно прикрутить throttle

Да, с флагом отличный план, это дешевле чем throttle.

Возможно еще лучше подойдет intersection observer, но это не точно. Смотря что вы делаете.
Ответ написан
Слишком мало исходных.
Если вы при начале скрола вешаете класс и потом не должны слушать скролл вообще, то можно просто убрать слушатель removeEventListener если конечно вешали его при помощи addEventListener
Ответ написан
@Kim_Soal
Оптимизировать события можно, написав обертки над слушателями, и давать срабатывать событиям не чаще чем time.
По идее, обработка проверки условия из простых переменных незначительна. Трудоемка перерисовка, обращение к Dom, и т.д.
Ответ написан
alex_keysi
@alex_keysi
Помог с решением? Отметь “правильный ответ”
Если срабатывает только это молификация на скроле то браузер минимизирует его если будет перед эти if проверка на isFixed. Т к js меняет dom представление сеттером fixed , то будет вызываться перерасчет css стилей. Лучше проверку сделать на isFixed , тогда браузер не будет мутировать dom дерево, а а будет только выполнять js код.
Тротрилг можно тоже поставить. Но от анимации зависит. Если нужно top менять на каждый скролл , то тротлинг не нужен. Будет все прыгать
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы