@kolomat

Возможно ли как-то ускорить скрипт?

Добрый день, суть проблемы такова. Пытаюсь разобраться с API поставщика, написал такой код
function GetAllProducts($token) {
	$total = getTotal($token);
	for($i = 100; $i <= $total; $i++) {
	$curl = curl_init();
		curl_setopt_array($curl, array(
		CURLOPT_URL => "http://api.brain.com.ua/products/1237/" . $token . "?offset=" .$i,
		CURLOPT_RETURNTRANSFER => true,
		CURLOPT_ENCODING => "",
		CURLOPT_MAXREDIRS => 10,
		CURLOPT_TIMEOUT => 30,
		CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
		CURLOPT_CUSTOMREQUEST => "GET"
		
		));
		$response = curl_exec($curl);
		curl_close($curl);
		$response = json_decode($response);
		$dbLink = connectdb();
		foreach($response->result as $product) {
			$dbLink->query("INSERT INTO product (product_id) VALUE ('". $product->productID ."');");
		}
	}	
}

Api при обращении отдает только 100 товаров и в переменной $total лежит общее количество товаров для раздела, например 1000. Что бы получить остальные товары используется ?offset=. Например, если offset=0, то получаем первые 100 товаров, offset=100, получаем следующие 100 товаров и так далее пока не достигнем $total. Скрипт вроде бы и работает, но сказать что он работает крайне медленно это не сказать ничего. Например на обработка 1000 товаров из раздела уходит минут 10. Вопрос в чем, может быть кто-то может посоветовать как можно улучшить цикл для более быстрой работы? Так как предпологается еще циклы для получения других разделов и так далее.
  • Вопрос задан
  • 138 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Hamsterick
1. Offset - это смещение, для вывода только 100 товаров, нужно использоваться limit=100.
2. Если вы выводите по 100 товаров, то и $i++ нужно заменить на $i=$i+100
3. Почему в функции GetAllProducts используется INSERT в базу? Да и еще не подготовленным запросом, а построчно, скорее всего тут дольше всего скрипт выполняется.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы