2016-03-02 5 views
0

У меня есть большая проблема, когда я извлекаю json-файл с моего сервера. Этот json-файл имеет 1,2 МБ данных. Так что это довольно большой файл. Таким образом, в моей функции инициализации я сделать:Angularjs управляет большим количеством данных

$scope.init = function(allmatrix) { 
    if (allmatrix.length > 0) { 
     $scope.jsonResult = allmatrix[0]; 
    } 
} 

Это означает, что каждый раз, когда я перейти на главную страницу у меня есть, чтобы загрузить 1,2 МБ данных (данные JSon внутри «allmatrix» переменная). Поэтому я не знаю, как с этим бороться, потому что пока это не эффективно. Возможно, мне нужно кэшировать данные или использовать поток в angularjs (потому что мой пользовательский интерфейс остается заблокированным в течение двух минут). если кто-то уже столкнулся с этой проблемой, не могли бы вы мне помочь?

ответ

0

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

1) Вы можете включить сжатие на своем веб-сервере. Это снизит время, которое данные будут отправлены по сети. Включение сжатия зависит от того, какой тип веб-сервера вы используете. Вот пример того, как это сделать с помощью tomcat: http://viralpatel.net/blogs/enable-gzip-compression-in-tomcat/

2) Укоротите ключи в объектах json, которые вы передаете. Json может быть довольно повторительным, поэтому попробуйте сделать его как можно меньше. Вы жертвуете удобочитаемостью, но можете значительно уменьшить размер своих данных. например оригинал:

[{'longkey1':'val1','longkey2':'val12},{'longkey1':'val3','longkey2':'val14},...] 

изменить что-то вроде:

[{'a':'val1','b':'val12},{'a':'val3','b':'val14},...] 

3) Вы говорите, что ваша домашняя страница будет заблокирована до тех пор, пока данные загружаются в формате JSON? Вы должны получать данные асинхронно, чтобы ваша страница могла загружать и отображать значимые сообщения «загрузка данных, пожалуйста, подождите». Это было бы более изящным. Вы действительно не предоставляете код для того, как вы получаете json от вашего ранга, поэтому его трудно комментировать гораздо больше.

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

5) Кэширование также будет работать хорошо (возможно, в сочетании с приведенным выше) при условии, что данные json, которые вы загружаете, не часто меняются.

Надеюсь, это поможет.

+0

Я думаю, что я ищу комбинацию третьего и четвертого способов. Чтобы объяснить, как я получаю данные в своем сервлете, я делаю это: –

+0

Я думаю, что я ищу комбинацию третьего и четвертого способов. Чтобы объяснить, как я получаю данные в моем сервлете, я делаю это: 'req.setAttribute (« allMatrix », matrix.readAll());' когда я использую matrix.readAll(), я извлекаю все данные. а затем в angularjs я делаю это: 'ng-init =" init ($ {allMatrix}) "на домашней странице. Поэтому я думаю, что если я смогу асинхронно извлекать данные, это будет здорово. –

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