Как ускорить 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 сохраняет соединение с сервером открытым. Это работает только в том случае, если сервер одинаков между запросами, как и ваш.


попробуйте установить curl_setopt($ch, CURLOPT_ENCODING, '') это включить сжатие gzip