Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.06.2020, 13:31
Интересующийся
Отправить личное сообщение для Sevic Посмотреть профиль Найти все сообщения от Sevic
 
Регистрация: 04.02.2018
Сообщений: 17

синхронизация вкладок через localStorage, вебсокет.
Пытаюсь сделать синхронизацию вкладок с помощью localStorage. Хочу сделать одно подключение вебсокет на браузер, допустим на главную вкладку. Это вкладка обрабатывает данные с вебсокета и затем заносит эти данные в localstorage, остальные вкладки по событию storage получают данные и также обрабатывают их.

код на главной вкладке:
socket.onmessage = function(e) {
    // ... обрабатываю данные для текущей вкладки ...
		
    localStorage.setItem('key', JSON.stringify(e.data));
    localStorage.removeItem('key');
}


код на второстепенной вкладке:
window.addEventListener('storage', function() {
    let data = JSON.parse(localStorage.getItem('key'));
    // ... обрабатываю data для текущей вкладки ...
})


Тестирую на локальном сервере, все работает, все вкладки получают данные. Но что если данные будут приходить очень часто, каждые несколько миллисекунд новые данные, второстепенные вкладки будут получать все данные или что-то пропустят?
Ответить с цитированием
  #2 (permalink)  
Старый 22.06.2020, 14:17
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,823

Я думаю, что ничего не потеряется, если брать данные из события, а не из хранилища.

Чтобы не выполнять ненужные операции по несколько тысяч раз в секунду можно воспользоваться троттлингом.

В любом случае, проверить происходит ли потеря данных не так сложно.

Первая вкладка:
var buffer = [];
addEventListener('storage', function (e) {
    buffer.push(e);
});


Вторая вкладка:
for (let i = 0; i < 100; i++) {
    setTimeout(i => {
        localStorage.setItem('test', `loop: ${i}`);
    }, 10, i);
}


После запуска кода во второй вкладке просто обратитесь к переменной buffer в первой вкладке и посмотрите сколько событий было записано в массив.
Ответить с цитированием
  #3 (permalink)  
Старый 22.06.2020, 18:13
Интересующийся
Отправить личное сообщение для Sevic Посмотреть профиль Найти все сообщения от Sevic
 
Регистрация: 04.02.2018
Сообщений: 17

Объект события - это то, что нужно: e.key, e.newValue. Никаких потерь.
Большое спасибо!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Конструктор массива объектов и работа с ними через localStorage pepel266 Общие вопросы Javascript 16 04.11.2015 18:30
сохранение через localstorage Titanic Ваши сайты и скрипты 3 11.10.2015 02:11
Значение переменной через запятую DDSSDD Серверные языки и технологии 41 16.10.2014 15:01