Angularjs получает запрос на огромный файл JSON

Мне нужно отобразить некоторые данные из базы данных для пользователя. Данные находятся в файле JSON и имеют довольно большой размер. Размер файла JSON составляет около 15 МБ. Я создал сервис и использовал обещание api, чтобы сделать успешный запрос, загрузить данные и показать их пользователю, выполнив команду ng-repeat для div. Теперь, как вы понимаете, на странице будут отображаться данные только тогда, когда файл доступен, и выполнение запроса на получение файла 15 МБ занимает огромное количество времени. Я вижу, что в некоторых случаях Firefox просто перестает загружать файл через некоторое время. Теперь мой вопрос заключается в том, каков угловой способ решения такой задачи.

Я подумываю сделать что-то вроде: сначала показать всего несколько записей из файла json, а затем прокрутить оставшуюся часть страницы, которая будет заполнена оставшимися данными, но я полагаю, что это не удастся, потому что, когда запрос get это сделал, он сначала полностью загрузит файл, а затем отобразит данные?

Angular предоставляет нечто, называемое ng-cloak, но это только для предотвращения мерцания. Есть ли что-то вроде ng-cloak in angular, которое я могу использовать? Любые другие идеи или как иметь дело с такими сценариями или каков угловой способ достижения этого?

2 ответа

Исходя из ваших требований иметь дело с огромной полезной нагрузкой JSON. FWIW у вас есть два варианта:

  • Ваш сервер поддерживает потоковую передачу HTTP/JSON:

    создайте угловой обработчик onreadystatechange и используйте потоковый JSON-анализатор, такой как oboe.js

  • Ваш сервер НЕ поддерживает потоковую передачу HTTP/JSON

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

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

Что-то вроде:

/ Бэкэнд /getentries? Пропустить =500& Count=100

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

Другие вопросы по тегам