@McThinker

Как оптимизировать код js?

Приветствую. Есть куча товаров на странице, скажем до 200 $('.my-orders'). Если открыта соседняя вкладка и статус товара меняется, мне его нужно удалить в другой вкладке ну и убрать регламент у него. По этому пишу в localStorage "changeReglament", ну и хожу каждые 10 сек проверяю появился ли статус по этому заказу в localStorage
Насколько такой подход правильный и не будет ли each жрать память?
setInterval(function () {
    if (localStorage.getItem('changeReglament') !== null) {
      let getChange = localStorage.getItem('changeReglament');
      getChange = JSON.parse(getChange);
      for (var key in getChange) {
        $('.my-orders').each(function () {
          let orderId = $(this).find('.id-orders').text();
          if(orderId === key) {
            console.log('remove')
          }
        })
      }
    }
  }, 10000)
  • Вопрос задан
  • 216 просмотров
Решения вопроса 2
@McThinker Автор вопроса
Переписал так:
window.addEventListener('storage', event => {
    if (event.key === 'changeReglament') {
      let getChange = localStorage.getItem('changeReglament');
      getChange = JSON.parse(getChange);
      for (var key in getChange) {
        $('.my-orders[data-id="' + key + '"]').remove();
      }
    }
  })


спасибо всем
Ответ написан
Комментировать
zkrvndm
@zkrvndm
Архитектор решений
Для отслеживания хранилища есть специальное событие:
window.addEventListener('storage', function(events) {
    console.dir(events);
});

StorageEvent вызывается каждый раз, когда произошло изменение в localStorage. Это не работает на странице, которая вносит изменения, но срабатывает на открытых страницах домена в броузере. То есть, данное событие оповещает открытые вкладки одного сайта о произошедшем событии.

Источник: https://itnan.ru/post.php?c=1&p=317586
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

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

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