@nurzhannogerbek

Как на стороне клиента принять данные по частям при GET запросе?

Здравсвтуйте, товарищи! Помогите пожалуйста разобраться.

В Vue.js (версия 2.5.17) приложении делаю GET запрос к определенному URL адресу. Backend возвращает большой пул данных по частям с помощью пакета JSONStream. Под большим пулом данных я имею введу ~ 200 000 записей. Данные записи предполагается наносить на Яндекс карту, поэтому pagination или lazy loading не мой вариант.

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

Я замерял скорость и пришел к выводу, что самым времязатратным процессом является отрисовка гео-объектов на карте. При этим данный процесс начинается лишь тогда, когда axios примет все данные. Учитывая, все это у меня возник вопрос. Как принять эти данные по частям на стороне клиента?

P.S. Количество записей не могу уменьшить. Axios весь пул данных получает за 5-7 секунд после моей оптимизации на стороне БД, еще 5-8 секунд уходит на отрисовку гео-объектов на карте. Как вы понимаете 10-15 секунд для веб приложение очень много. Поэтому возник вопрос, получать на стороне клиента данные кусками и сразу отрисовывать их на карте параллельно.
  • Вопрос задан
  • 796 просмотров
Пригласить эксперта
Ответы на вопрос 4
Lumore
@Lumore
Front-end developer
Делали примерно такое же, но кол-во объектов было немного меньше.
1) Кэшируйте данные на стороне backend
2) Используйте кластеры
3) Грузите и рендерите метки в зависимости от зума и перемещений на карте
Ответ написан
@kttotto
пофиг на чем писать
Если Вы не можете использовать пагинацию данных, то никак. Если Вы имеете доступ к оптимизации бд, то может имеете доступ и к backend, тогда добавить api, чтобы можно было получать часть данных по параметрам страница и кол-во данных на странице.
А в таком варианте можно посоветовать только отрисовывать параллельно, может пару секунд сэкономится.
Ответ написан
Комментировать
@kodwi
https://moikrug.ru/kodwi
Вы точно правильно подходите к решению задачи? Если это у вас гора точек, которые нужно отображать на карте, то можно же применить аналог паджинации по определенному периметру в зависимости от текущего масштаба. Если, например, запрашиваются данные для большого периметра, на беке можно группировать точки.
Ответ написан
@grinat
Включи gzip. И у меня большие сомнения что яндекс способен отрисовать 200k точек, лефлет да, яндекс точно нет. На слабом компьютере у яндекса уже сотня тормозит. С 200к на каком нибудь айпаде вообще будет ошибка о том что нет памяти. Грузите и рендерите метки в зависимости от зума и перемещений на карте. Но если хочется, то https://developer.mozilla.org/en-US/docs/Web/API/S...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы