2013-12-23 3 views
2

Мы используем локальный модуль хранения от angularjs.Как установить «зависимость кеша» к локальному хранилищу

https://github.com/grevory/angular-local-storage

Теперь может кто-нибудь подскажет, как можно установить зависимость кэша на стороне клиента, так что при изменении данных на сервере локальное хранилище аннулируется (форсирует для выборки данных заново с сервера).

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

Спасибо за помощь.

ответ

4

Установите номер версии в своем приложении и сохраните ее в локальном хранилище при посещении пользователем.

Когда приложение инициализировано, сравните версию локального хранилища с App.version.

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

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


Всего несколько примечаний, относящихся к комментариям.

У меня были проблемы в прошлом с местным хранилищем из-за разных событий. Часть 3 выходит за рамки вопроса, но стоит упомянуть о полноте.

  1. Новый выпуск: исходный код приложения был изменен, а данные, хранящиеся в нем, структурированы по-разному. Возможно, теперь это JSON.stringified, например. Или, возможно, мы ожидали строку, и теперь мы получаем целое число, которое может сломать что-то со строгой проверкой типов.

    Решается с использованием подхода, описанного выше. Приложение изменилось, поэтому приложение имеет новую версию и знает, что не может доверять данным, полученным из локального хранилища, для другой версии.

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

    Как мы скажем приложению, что все изменилось? Периодически запрашивайте некоторый токен с сервера, возможно, временную метку, которую мы можем сравнить, чтобы увидеть, произошло ли изменение с момента последнего обращения к данным. This question рассказывает о различных способах этого.

  3. Сам JavaScript изменился: у нас есть продуманная производственная сборка, и теперь есть новая, но у пользователя все еще есть старая сборка. Это проблема, когда сервер ожидает различные запросы к тому, что он теперь получит от новой сборки.

    Простым решением здесь является привязка номера версии какого-либо типа к концу URL-адреса ресурса, так что браузер запрашивает application.min.js?v=2 вместо application.min.js?v=1.

+0

Спасибо @bcmcfc за ваши мысли. Извините, если я немного наивна, но как и когда вы предлагаете получить номер версии сервера? Или это то, что мы можем получить от каждого ответа сервера? – Anoop

+0

Извиняюсь, я не думаю, что все это произошло, когда я впервые прочитал ваш вопрос. Я больше концентрировал внимание на стороне кеширования, чем на стороне изменения данных. Возможно, вам понадобится вызов AJAX для получения номера версии в первом экземпляре или, возможно, при каждой загрузке страницы? Отчасти это зависит от того, как часто изменяются данные и какова ваша бизнес-логика для того, как ее нужно обрабатывать. – bcmcfc

+0

Возможно, вы можете сохранить сервер сервера timestamp lastUpdate, который периодически запрашивается с помощью приложения «Угловое». Если он был обновлен совсем недавно, чем копия приложения, протрите локальное хранилище и запросите новые данные. – bcmcfc

Смежные вопросы