Я разрабатываю веб-приложение, используя Laravel (PHP-фреймворк). Приложение собирается использовать около 30 моих коллег на своих ноутбуках с Windows.
Мои коллеги регулярно опрашивают людей. Они будут использовать веб-приложение для добавления нового профиля в базу данных после первого собеседования с кем-либо, и они будут добавлять примечания к этим профилям при последующих посещениях. Профили и заметки хранятся с использованием MySQL, но, поскольку я использую Laravel, я мог легко переключиться на другую базу данных.
Иногда моим коллегам приходится брать интервью у людей, когда они не в сети. Они могут посетить группу интервьюируемых, добавить несколько профилей и добавить некоторые заметки к уже существующим во время сеанса без доступа к Интернету.
Как мне подойти к этому?
Я хотел бы попробовать вариант (3), но мое приложение управляется базой данных, и я не уверен, что смогу реализовать этот подход:
Спасибо
Пида
Вы можете создать то, что вы описываете, используя сервисные работники для кэширования статического контента вашего сайта, чтобы сделать его доступным в автономном режиме, и конкретный fetch
обработчик в сервисном работнике для обнаружения сбоя PUT
или же POST
и поставить в очередь данные в IndexedDB
, Вы бы тогда периодически проверять IndexedDB
для любых данных в очереди, когда ваше веб-приложение загружено, и попытайтесь отправить его заново.
Я описал этот подход более подробно на https://developers.google.com/web/showcase/case-study/service-workers-iowa#updates-to-users-schedules
Эта статья предполагает использование sw-precache
библиотека для кэширования статических ресурсов вашего сайта, и sw-toolbox
библиотека для обеспечения времени выполнения fetch
обработчики, которые проверяют на неудачные запросы бизнес-логики. Он также использует обещание на основе IndexedDB
обертка называется simpleDB
хотя я бы, наверное, пошел с более свежим idb
библиотека в наше время.
Я бы подумал об этом, как о создании приложения в «двух частях».
Во-первых, внешний интерфейс использует ajax-вызовы для внутреннего интерфейса (который является не чем иным, как REST API). Если нет никакого сетевого подключения, сохраните данные в браузере, используя локальное хранилище.
Когда пользователь позже подключится к сети, вы можете отправить данные, которые существуют в локальном хранилище, на сервер и очистить локальное хранилище.
Если вы добавите веб-серверы на ноутбуки, базы данных и информация будут храниться только на их локальных ноутбуках и не будут синхронизироваться.