2016-12-12 1 views
-2

Проблема в следующем: Мне нужно получить некоторые данные из API. Данные разбиты на страницы. Конечные точки являются чем-то вроде этого:Как я могу получить несколько страниц из API в режиме выполнения?

api.io/getdata/pvt/orders?per_page=100&page=1 

Мне нужно, чтобы получить эти данные и иметь его на своем собственном приложении, готов манипулировать.

Мое приложение фактически находится на вершине Ларавеля. Я извлекаю эти данные с помощью «Задания и очереди», и для получения данных требуется слишком много времени.

Как я могу улучшить его производительность?

EDIT

Метод таков:

public function send() 
{ 
    Log::info("Starting job FetchOrders:"); 
    $url_feed = "http://genericapi.com/orders?per_page=100"; 

    $first_request = json_decode($this->request($url_feed), true); 

    $number_pages = $first_request['paging']['pages']; 

    Log::info("Number of pages been fetched " . $number_pages); 

    for ($i=1; $i < $number_pages; $i = $i + 10) { 
     Log::info("Fetching page " . $i); 
     $orderUrl = $url_feed . "&page="; 
     $this->dispatch(new FetchOrders($orderUrl, $i)); 
    } 

    return response($first_request['facets'], 200) 
         ->header('Content-Type', 'text/json'); 
} 

И ручка FetchOrders Иова:

public function handle() 
{ 
    $data = ['list' => []]; 
    $request = []; 
    for ($i=0; $i < 9; $i++) { 
     $url = $this->url . ($this->page_number + $i); 
     Log::info("REQUESTING URL:" . $url); 
     $request = json_decode($this->request($url), true); 

     $data['list'] = $data['list'] + $request['list']; 
    } 
    Log::info(json_encode($data)); 
} 
+2

SO - это ресурс для консультаций по существующим вопросам ms, а не поставщиком решений. Попробуйте решение, предоставите фрагмент кода и сушите свой вопрос. –

+0

Я на самом деле делаю это с помощью заданий и очередей. Это медленно. Настолько медленный. Выведет какой-то код. –

ответ

0

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

  1. Рассмотрим сокращения количества per_page, не пользователи действительно должны смотреть на 100 заказов на один раз?

  2. Попробуйте указать поля для запросов запроса БД. например: Вместо SELECT * FROM сделать SELECT order_number, .. FROM

  3. Попробуйте Eager load связанные данные, если есть какое-либо

  4. Кэширование может также решать проблемы производительности непосредственно, если вы используете репозитории, вы можете реализовать кэширование там

  5. Если у вас есть сложные запросы, используйте EXPLAIN, чтобы понять и оптимизировать их.

+0

1 - Мне нужно получить данные со всех страниц и манипулировать им. Например: Мне нужен самый продаваемый продукт из заказов. Для этого мне нужно посмотреть все страницы и передать данные через алгоритм. 2 - У меня нет доступа к запросам, я только использую API :( 3 - Я посмотрю, как это применимо к делу. 4 - Я посмотрю, как это применимо к делу. –

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