Написание веб-приложения для работы в режиме онлайн / офлайн действительно очень похоже на написание любого «обычного» серверного веб-приложения, за исключением того, что у вас есть слой доступа к данным (DAL), который находится между вашим приложениеми данные, хранящиеся на сервере (в режиме онлайн) или в браузере (в автономном режиме).
В зависимости от приложения и его потребностей, вы можете работать в одном из 2 режимов: a.) Aрежим кэширования и проверки наилучшего качества или б.) режим загрузки и проверки обновлений.
Каждый из этих двух режимов имеет свои хорошие и плохие части, и вы можетеОпределенно, есть разные части вашего приложения, которые склоняются в ту или иную сторону.
Режим «Кэшируйте и попробуйте ваш лучший»
Для этого режима кэш-память DALданные с сервера в хранилище данных браузера, когда он обращается к данным во время своей нормальной работы.Находясь в автономном режиме, DAL старается наилучшим образом удовлетворить запросы пользователей, но у него есть только кэшированные данные для работы, и поэтому некоторые операции могут быть не в состоянии завершиться (или, по крайней мере, не сразу).С другой стороны, существует минимальное время запуска, ожидающее загрузки данных, но с другой стороны, каждое действие требует попадания на сервер (если он подключен), и эти данные должны кэшироваться.Приложение также должно корректно завершаться с ошибкой для любой операции, которую оно не может выполнить из-за неполных данных.
Режим загрузки и проверки обновлений
В этом случае DAL загружает все данные, необходимые приложению, в браузер при запуске приложения.Если приложение уже загружено, необходимо обновить все данные, чтобы убедиться, что кэш не устарел.С другой стороны, пользователю не нужно долго ждать, чтобы что-то сделать, поскольку все является локальной операцией, но, с другой стороны, если данных много, время запуска может бытьдовольно длинный.
В любом случае вам придется бороться с устаревшими проблемами кэша и проблемами с сохраняющимися автономными операциями на сервере.Это означает, что при запуске, а также, возможно, периодически, пока приложение работает, вам нужно будет синхронизироваться с сервером, чтобы обновлять кэшированные данные, и делиться любым локальным состоянием, которое у вас может быть, с сервером, чтобычто остальной мир видит обновления от этого экземпляра приложения.
Постоянные операции на сервере, которые происходили, когда приложение находилось в автономном режиме, могут быть особенно хитрыми, когда данные, связанные с этой операцией, изменяются междуОбновления приложения.Например, если остаток в кэшированном банке устарел и указывает на гораздо больше денег, чем «истинное» состояние, отображаемое сервером, пользователь может перезаписать счет, не зная его.Это экстремальный пример, но для обработки обновлений, которые могут встречаться друг с другом, необходимо наличие такого рода оперативного обнаружения столкновений.
В целом, если у вас есть приложение, которое может быть включено или выключено-линей, напиши приложение так, чтобы само приложение не заботилось.Уровень данных более низкого уровня абстрагирует от всех проблем, и вашему приложению нужно только знать, как справиться с неспособностью получать требуемую информацию (что должно делать любое хорошее приложение, в автономном или автономном режиме).
Для корзины покупок у вас, вероятно (или, надеюсь,?), НАМНОГО больше продуктов, чем любой отдельный покупатель может положить в корзину.Загрузка всех этих файлов в каждый браузер почти наверняка является ОГРОМНОЙ тратой полосы пропускания и может привести к такой задержке для ваших пользователей, что огромные затраты на пропускную способность и потерянные продажи (из-за медленного времени отклика) быстро поглотят любой бизнес.Загружайте продукты в данные браузера по мере необходимости, и при желании вы можете загрузить другие продукты, которые «также купили другие пользователи», связанные с товарами, фактически находящимися в корзине.