Как ускорить cURL в php?
Я пытаюсь вставить твит из Twitter. Итак, я использую cURL, чтобы вернуть json. Я написал небольшой тест, но тест занимает около 5 секунд, а также, когда я запустить его локально. Так что я не знаю, что я делаю не так.
public function get_tweet_embed($tw_id) {
$json_url = "https://api.twitter.com/1/statuses/oembed.json?id={$tw_id}&align=left&omit_script=true&hide_media=false";
$ch = curl_init( $json_url );
$start_time = microtime(TRUE);
$JSON = curl_exec($ch);
$end_time = microtime(TRUE);
echo $end_time - $start_time; //5.7961111068726
return $this->get_html($JSON);
}
private function get_html($embed_json) {
$JSON_Data = json_decode($embed_json,true);
$tw_embed_code = $JSON_Data["html"];
return $tw_embed_code;
}
когда я вставляю ссылку и проверить его в браузере очень быстро.
4 ответов
Что касается среды, я заметил в PHP, что cURL обычно работает очень быстро в большинстве сред, за исключением мест, где низкий процессор и более низкая производительность сети. Например, на localhost на моем установка МАМП, завить быстро, на большой инстанс Amazon, завиток быстро. Но на небольшом дрянном хостинге я видел проблемы с производительностью, когда он заметно медленнее подключается. Хотя, я не уверен точно почему это медленнее. Кроме того, он уверен не 5 секунд медленнее.
чтобы определить, является ли его PHP или ваша среда, Вы должны попробовать взаимодействовать с curl через командную строку. По крайней мере, вы сможете исключить PHP-код, являющийся проблемой, если его все еще 5 секунд.
окончательное решение для ускорения-это
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );
в отношении
лучшим ускорением, которое у меня когда-либо было, было повторное использование той же ручки завитка.
Заменить $ch = curl_init( $json_url );
с curl_setopt($ch, CURLOPT_URL, $url);
. Тогда вне функций есть один $ch = curl_init();
. Вам нужно сделать $ch
global в функциях для доступа к нему.
повторное использование ручки curl сохраняет соединение с сервером открытым. Это работает только в том случае, если сервер одинаков между запросами, как и ваш.