@likejavascript

Кэширование размеров window для повышения производительности?

Все мы знаем, что при получении каких-либо размеров окна, например:
$(window).height();
$(window).widgth();

Происходит перекомпоновка (reflow) DOM всей страницы, что при большом количестве элементов может вызывать некоторые задержки взаимодействия (это можно посмотреть в Chrome TimeLine).

А что если нам получать и кэшировать все необходимые размеры окна при его ресайзе и в последствии получать их когда нужно. Например так: jsperf.com/cached-window-size

Т.е на каждый ресайз окна, запоминаем его параметры и получаем где нужно без воздействий на производительность. Поскольку окно большую часть своего времени не меняет размеры, то мне кажется что profit есть.

А что вы думаете по этому поводу?
  • Вопрос задан
  • 2722 просмотра
Пригласить эксперта
Ответы на вопрос 4
Anonym
@Anonym
Программирую немного )
Я думаю, что нечасто приходится узнавать размеры окна. А если часто (например в процессе ресайза), то нет смысла кэшировать.
Ответ написан
@zvorygin
Насколько мне известно, там все и так кешируется, и если между двумя запросами height не было модификаций DOM и CSS, то все отработает быстро.
Ответ написан
drfisher
@drfisher
Пишу JS
Если компонентов, зависящих от ресайза много, то есть смысл создать посредника, который следил бы за ресайзом, один раз брал бы свежие размеры окна, а всем желающим раздавал бы уже закэшированные значения в кастомном событии.
Ответ написан
@likejavascript Автор вопроса
Зачем ресайзить то что находится около курсора, если курсор находится за пределами DOM window?


По умолчанию меню открывается справа от указателя мыши. Допустим вы кликаете правой кнопкой мыши в самой правой части рабочей области, в этом случае меню справа не поместится и мы тем самым размещаем его слева от указателя мыши (т,е чтобы правая гранца меню была перед курсором мыши, а не после, как в случае с дефорлным отображением) В этом случае нам необходимо знать размеры окна чтобы рассчитать такое позиционирование.

Если у вас совсем кровь-кишки-нужно_знать_то_что_не_нужно_знать, то делайте это через синглтон с таймером, который через 300-500 мс после начала ресайза будет опрашивать "а закончился ли ресайз", и если закончился, то будет ресайзить


Зачем это? Мне не нужно ничего ресайзить, мне просто нужно знать размеры окна, которые изменяются при его резайзе
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы