Показать сообщение отдельно
  #7 (permalink)  
Старый 08.07.2015, 22:18
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Теперь поговорим про локальную БД. Сразу скажу, что это реально геморой.

Начнём с синхронизации данных между клиентом и сервером. Лучше всего, использовать паттерн версионирования данных, т.е. заводим в нашей коллекции/таблице у документов/строк дополнительные поля, обычно хватает одного, назовём его __v и пускай это будет целое число, которое будет увеличиваться при каждом обновлении записи, и тогда для синхронизации данных будет достаточно прикрепить версию локальных данных в запросе, и если они отличаются, то сервер отдаст новые данные, а если нет - то пустой ответ. Разумеется, когда пользователь обновляет данные, то вместе с ответом сервера, что всё ок, он должен возвращать новую версию __v.

Более подробны про доступные паттерны версионирования можно почитать в книге Фаулера NoSQL.

Теперь про локальные хранилища: не юзай голый local storage, ибо без нормальной абстракции ты рискуешь огрести граблями. Лучше всего заюзать SQLLite (есть порт на asm.js) / IndexedDB (есть во всех современных браузерах) или библиотеку, которая инкапсулирует общения с хранилищем и даёт нормальный интерфейс запросов.

Про синхронизацию событий между вкладками: это геморой, но вообще можно юзать localStorage / sessionStorage и его событие onChange, или заюзать ServiceWorker (это вариант WebWorker, который биндится к домену, а не вкладке).
__________________
kobezzza
code monkey
Ответить с цитированием