Стратегии сделать веб-приложение доступным в автономном режиме?

в настоящее время мы создаем веб-приложение (Django, Ember), и мы только что обнаружили, что большинство наших потенциальных клиентов требуют спорадического автономного доступа к приложению.

нам нужно не просто "представить" приложение, чтобы пользователь мог перемещаться, кэшировать материал в манифесте и так далее (что, я думаю, нам тоже понадобится), но мы должны позволить пользователям работать как можно больше, как если бы они были онлайн. Очевидно, что некоторые функции будут недоступны, но основное использование приложение должно быть доступно.

тем не менее, я хотел бы услышать некоторые мысли о людях, которые сталкивались с этим сценарием раньше. Как я это вижу, нам нужно:

1.- Либо проверить, если мы онлайн / оффлайн постоянно или пусть пользователь указать, когда они собираются в автономном режиме (сортировка, как режим самолета в смартфоне).

2.- Все данные должны быть сброшены в IndexedDB, и с этого момента мы используем IndexedDB для всего, что связано с данными.

3.- Когда пользователь возвращается в сеть, процесс синхронизации должен попытаться сбросить данные из автономного пользователя в БД онлайн. Хотя это может выглядеть опасным, я не ожидаю, что многие пользователи будут отключены в то же время, пока другие пользователи онлайн используют приложение, поэтому я ожидаю, что этот процесс синхронизации не станет настоящим кошмаром, также я не ожидаю, что будут условия гонки.

Ну, и, очевидно, есть возможность создать автономное приложение для рабочего стола...но я постараюсь этого избежать. вероятный...

спасибо!

1 ответов


  1. чтобы проверить, если пользователь находится в автономном режиме или в интернете , вы можете использовать навигатор.onLine но это свойство поддерживается не во всех браузерах. Затем, если вы нацелены на некоторые из этих браузеров, вам придется реализовать другое решение с AJAX-вызовами, например.

  2. что касается синхронизации, вы можете использовать доступное решение, как CouchDB (NoSQL) на вашем сервере и используйте PouchDB (indexedDB) в вашем javascript front-end, который облегчит вам процесс синхронизации. Если это не соответствует вашим ожиданиям, реализуйте собственное решение, чтобы синхронизировать indexedDB с базой данных сервера (MySQL, Postgres, MongoDB и т. д...), конечно, вы все еще можете использовать pouchDB на переднем конце.

  3. по поводу производительности, я думаю, что это будет зависеть от:

    • количество серверов, на которых размещаются веб-приложения
    • количество реплик вашего мастера база данных
    • конфигурация ваших серверов (CPU и RAM)