2015-05-19 1 views
0

У меня действительно большое веб-приложение angularjs, которое загружает большие файлы при первом входе на сайт. Сайт состоит из нескольких SPA, и каждый раз, когда пользователь меняет один на другой, эти данные теряются и должны быть загружены снова. Кроме того, если пользователь нажимает кнопку «Обновить», данные снова загружаются.Сохранение больших объемов данных в AngularJS

Эти данные будут очень маловероятными изменениями во время сеанса пользователя, поэтому было бы здорово, если бы мы смогли его сохранить и перезагрузить, только когда есть обновление. Я знаю о локальном и сеансовом хранилище, но у них предел 5000k или 10000k, чего не будет достаточно. Мне понадобится хранилище 20000k.

Есть ли способ сделать это?

+1

Это неистовое количество статических данных в памяти для приложения сайта .. Вы можете посмотреть на реляционные БД через асинхронные вызовы, но вы все равно собираетесь звонить, чтобы заполнить его. Честно говоря, это звучит как ваш система плохо спроектирована .. Или ее неясно, чего вы пытаетесь достичь. Могут быть и другие варианты. – Pogrindis

+1

Если вы загружаете данные через один HTTP-запрос, запрос будет кэшироваться клиентом. Это удовлетворит ваши потребности. Ваш URL-адрес может быть чем-то вроде/getdate/, поэтому его NEW для каждого сеанса. из документов Когда кеш включен, $ http сохраняет ответ с сервера в указанном кеше. В следующий раз, когда будет выполнен один и тот же запрос, ответ будет отправлен из кеша без отправки запроса на сервер. –

+0

@Pogrindis, этот предел, вероятно, никогда не будет использоваться, и наши потребности, вероятно, будут около 7 или 8000 тыс., Но все же это слишком много для хранения сеанса; это очень большая сеть с тоннами информации, так что это действительно возмутительное количество данных. – David

ответ

0

Может быть, вы можете создать службу, которая использует $ HTTP для загрузки данных асинхронно и установите параметр кэша в истинно, как описано здесь: How to cache an http get service in angularjs

1

Мы имели один и тот же вопрос несколько месяцев назад и не нашли в силе решение. Мы использовали две работы:

  1. Используйте один SPA (поместите различные SPA в супер SPA). У нас был шанс сделать это. Не знаю, если это вариант для вас. Может быть полезен модуль ui-router, который маршрутизирует использование состояния вместо URL-адресов.

  2. Мы использовали разбитые на страницы данные, чтобы уменьшить размер начальных нагрузок.

Если вам нужно это огромное количество данных для вычисления, например. статистики в браузере или рендеринг графики, подумайте о переносе этого вычисления на бэкэнд.

Вы также можете использовать службу http для загрузки данных и кеширования. Но это только вариант, если данные не изменяются во время сеанса.

+0

Спасибо, @PeterPaulKiefer, я не могу переместить это на сервер, эти данные используются только для визуализации. Я рассмотрю ui-router, но я боюсь, что проблема с обновлением все еще остается проблемой, что может быть довольно распространено в Интернете, поскольку оно отображает информацию в реальном времени. – David

+0

Извините, я думаю, вы меня неправильно поняли. Ui-router - это только helfull, вы помещаете все SPA в супер SPA. Это не дает вам возможности кэшировать данные. Но есть и другая идея. Можно ли открывать новые браузерные окна для отдельных SPA и переключаться между ними? –

1

Да и нет. Вы можете использовать код на стороне сервера, чтобы добавить javascript на свою страницу разными способами, поэтому вам не нужно будет делать запрос ajax на сервер для получения данных. Например, если вы используете PHP вы можете сделать что-то вроде

<?php 
    $script = "<script> var Data = $data;</script>"; 
    echo $script; 
?> 

Тогда внутри элемента управления сделать что-то вроде

$scope.data = Data; 

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