Локальное хранилище против AngularJS $cacheFactory

У меня проблема с хранением большого количества данных на стороне клиента, и я не могу решить, какой способ лучше. Теперь я использую cacheFactory AngularJS, он работает нормально, но все данные перезагружаются с новым сеансом. Стоит ли вместо этого использовать локальное хранилище?


person Rasalom    schedule 10.10.2013    source источник
comment
Здравствуйте, вы можете использовать веб-хранилище, а затем получать данные с помощью фабрики, w3schools.com/html/html5_webstorage. жерех   -  person schwertfisch    schedule 10.10.2013
comment
Да, localstorage позволяет хранить данные, не заботясь о сеансе. Я также рекомендую посмотреть parse.com для сохранения данных в облаке, а не на сервере.   -  person Rohit    schedule 10.10.2013
comment
В итоге я выбрал github.com/gsklee/ngStorage Angular-way: No Getter 'n' Сеттер чушь!   -  person mb21    schedule 13.05.2014
comment
Стоит отметить, что локальное хранилище не является безопасным   -  person Blowsie    schedule 06.11.2014
comment
@mb21 ngStorage мертв, с выдающимися важными PR   -  person Blowsie    schedule 10.11.2014
comment
@Blowsie: почему ты говоришь, что ngStorage мертв?   -  person Rodney    schedule 28.03.2015
comment
@Rodney у него нет активности и критических проблем.   -  person Blowsie    schedule 31.03.2015


Ответы (4)


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

Одним из решений является использование нового API локального хранилища. Этот потрясающий модуль Angular сделает за вас всю грязную работу, и даже возвращается к файлам cookie для старых браузеров!

person Blackhole    schedule 10.10.2013
comment
Нет, вы должны сериализовать свои объекты, прежде чем хранить их (и десериализовать, чтобы читать их), обычно в JSON. Но хранить объекты напрямую не имеет большого смысла, поскольку все постоянные хранилища обязательно используют файлы и, следовательно, линеаризованные данные. - person Blackhole; 12.10.2013
comment
Голосуйте за упоминание локального модуля хранения. Сэкономил мне много кода! - person masimplo; 27.12.2013
comment
@Rasalom Я опаздываю на вечеринку, но я посмотрел исходный код модуля localstorage, и он хранит объекты без необходимости самостоятельно кодировать/декодировать их json (он делает это за вас). Эта функция, возможно, была разработана после этого поста, но я хотел поделиться ею с будущими читателями. - person TorranceScott; 11.06.2014
comment
Демонстрационная страница, на которую вы ссылаетесь, на самом деле не работает, в консоли есть неотловленная синтаксическая ошибка. - person Charlie Schliesser; 02.07.2014
comment
@CharlieS Вы можете сообщить о проблеме автору модуля в системе отслеживания ошибок. . Надо срочно ремонтировать! - person Blackhole; 02.07.2014
comment
Потрясающе, спасибо. Я не видел ссылку на GitHub на демо-странице. - person Charlie Schliesser; 03.07.2014
comment
Обратите внимание, что $cacheFactory не кэширует данные для текущего сеанса, он кэширует данные в памяти, поэтому только до тех пор, пока ваше приложение angular живо. Обновление страницы, например, убивает его. @Blackhole, не могли бы вы обновить это, чтобы не вводить людей в заблуждение? - person tsemer; 20.07.2016

Альтернативное решение — http://jmdobry.github.io/angular-cache/, которое работает хорошо работает с ngResource, а также может быть легко настроен для синхронизации с localStorage, поэтому запросы не нужно повторно выполнять после обновления страницы.

$resource('my/kewl/url/:key', { key: '@key' }, {
  'get': { method: 'GET', 
           cache: $angularCacheFactory('MyKewlResourceCache', { 
                                          storageMode: 'localStorage' })
         }
});
person tmaximini    schedule 13.12.2013
comment
Я чувствую, что это более мощное решение, чем решение из принятого ответа. Спасибо за ресурс $ не вижу его на официальном сайте - person Phung D. An; 20.03.2015

$cacheFactory кажется явно НЕ вашим решением, потому что, как сказал Blackhole, кеш будет очищаться каждый раз, когда истечет сеанс. $cacheFactory — это просто реализация memcache в стиле Angular.

angular-cache — это просто вспомогательный API, в основном он добавляет опцию в $cacheFactory, и одна из этих опций — хранить кеш в постоянном хранилище (например, localStorage).

Поэтому, если вы хотите хранить данные в постоянном хранилище, вы можете использовать один из доступных модулей, например angular-local -storage или используйте $cookieStore, но это создаст файлы cookie. ..

person Gut    schedule 29.09.2014
comment
Опять же, $cacheFactory не кэширует данные для текущего сеанса, он кэширует данные в памяти, поэтому только до тех пор, пока ваше приложение angular живо. Обновление страницы, например, убивает его. @ user3305685, не могли бы вы обновить это, чтобы не вводить людей в заблуждение? - person tsemer; 20.07.2016

Другой угловой модуль, который выполняет эту работу: https://github.com/jmdobry/angular-cache

person hugsbrugs    schedule 07.05.2015