Как ускорить получение данных с API?

248
06 мая 2017, 23:34
  1. Пользователь ввел id.
  2. Делаю к API другого сервиса запрос с этип id.
  3. Получаю к примеру общее количество записей 19000.

Теперь мне нужно пройтись по каждой записи с этих 19000, получить значение этой записи и после определить максимальное значение из этих 19000. API за один запрос дает максимально 200 записей.

Я сделал так:
1. Цикл for от 1 до 19000/200
2. За каждый проход цикла, записываю в массив максимальное значение из 200.
3. Когда for дошел до конца, выбираю максимальное значение из записанного массива.

Работает, но работает долго.

Каким образом это улучшить или нужно по другому это делать?

Answer 1

Не поможет. Предположим, у вас хорошее апи и отвечает в среднем за 0,05с (с учётом всех накладных расходов отправки, обработки и доставки ответа до вашей железки). 19000/200*0,05 - что будет чуть менее 5 секунд реального времени. Предположим ещё более быстрое и стабильное апи с временем получения ответа в 0,01с - это всё ещё одна секунда реального времени.

Не имеет значения, что и как вы делаете на своей стороне, если 99% времени вы просто ждёте результат вызова API.

Если владелец API за такое не обидится и не начнёт ужимать лимиты по числу запросов (сотня запросов в секунду от одного вашего скрипта - это весьма много) то можно взять multi curl и выполнять запросы к api параллельно. В печальном случае, если API не базируется на HTTP - то писать свою обвязку на неблокирующих сокетах. И повторюсь, есть большой шанс влететь на лимиты использования API. А то и вообще положить шквалом запросов внешнюю систему, если та не готова к такой интенсивности запросов.

Более демократично - вывести пользователю прогрессбар. И заполнять его по мере обработки запросов. Т.е. сразу дать понять в интерфейсе, что задача требует времени и что про пользователя не забыли, его задача обрабатывается.

А оптимально, конечно, было бы убедить внешнюю систему добавить соответствующую возможность.

READ ALSO
Как подружить PHP и Sqldeveloper

Как подружить PHP и Sqldeveloper

Есть база данных на SqldeveloperУ меня есть задача создать кое-какой вебсервис

215
Правка документов онлайн

Правка документов онлайн

Добрый день! Такая задачаЗаказчик хочет загружать бланки документов на сайт (там вордпресс стоит) так, чтобы пользователи могли их заполнять...

232
Оптимальное построение таблицы бд

Оптимальное построение таблицы бд

Всем приветДоделываю свой интернет-магазин

237
Обработка CSV файла и загрузка в БД на PHP

Обработка CSV файла и загрузка в БД на PHP

Есть файл CSV с данными - 2000 записейФайл обрабатывается и построчно записывается в БД

246