Comment faire pour accélérer cURL en php?
Je vais essayer d'obtenir embed tweet de Twitter. Donc, je suis à l'aide de cURL pour obtenir le json en arrière. J'ai écrit un petit test, mais le test prend environ 5 secondes aussi bien que lorsque j'exécute localement. Donc, je ne suis pas sûr de ce que je fais mal ici.
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;
}
Quand je colle le lien et de le tester à partir du navigateur, il est très rapide.
OriginalL'auteur toy | 2013-10-19
Vous devez vous connecter pour publier un commentaire.
Avec le respect de l'environnement, j'ai observé dans PHP cURL fonctionne généralement très rapide dans la plupart des environnements, sauf dans les endroits où il y a peu de CPU et il est plus lent, les performances du réseau. Par exemple, sur localhost sur mon MAMP installation, curl est rapide, sur un plus gros amazon instance, curl est rapide. Mais sur une petite merde d'hébergement, j'ai vu qu'il ont des problèmes de performances où il est sensiblement plus lents à se connecter. Cependant, je ne suis pas sûr exactement pourquoi qui est plus lent. Aussi, c'est sûr qu'il n'était pas 5 secondes de plus.
pour aider à déterminer si son de PHP ou de votre environnement, vous devriez essayer d'interagir avec curl via la ligne de commande. À moins que vous serez en mesure d'écarter le code PHP est le problème si il y a encore 5 secondes.
OriginalL'auteur Kristian
La meilleure vitesse que je ai jamais eu a été de réutiliser le même curl poignée.
Remplacer
$ch = curl_init( $json_url );
aveccurl_setopt($ch, CURLOPT_URL, $url);
. Ensuite, à l'extérieur de l'fonctions ont un$ch = curl_init();
. Vous aurez besoin de faire$ch
mondial dans les fonctions d'accès.La réutilisation de la boucle de la poignée maintient la connexion au serveur ouvert. Cela ne fonctionne que si le serveur est le même entre les demandes, comme la vôtre.
OriginalL'auteur Michael Ozeryansky
La solution finale pour accélérer est-ce
Ce qui concerne
Je ne vois pas d'amélioration avec cette option
essayez-vous à "sauter" IP v6 résoudre ce problème?
Ce devrait être la vraie solution, et que si le système est correctement configuré curl fonctionnent très bien, sinon ipv6 résoudre en prenant trop de temps puis revient à ipv4
Cela a résolu mon problème, ayant la demande prend environ 6 secondes, jusqu'à environ 1 sec
OriginalL'auteur CoverUp
Essayer de mettre
curl_setopt($ch, CURLOPT_ENCODING, '')
c'est activer la compression gzip
Essayez la page de téléchargement à partir d'un autre site, peut-être problème de serveur web local.
est-il un moyen de vérifier? im en utilisant Apache 2, le n Centos 5.8
Il semble que 50% plus rapide pour moi avec cette option, mais j'imagine que ça va dépendre de la taille de votre réponse. Ma demande est un fichier de 500 ko, gziped c'est 22k il rend le transfert plus rapide pour moi. Si votre réponse est très petite, gzip peut être inutile et parce qu'il sera de la même taille et le même temps de transfert. Grâce ncs
OriginalL'auteur ncs
Pour accélérer la vitesse de roulage je vous recommande de créer des classes spéciales pour l'API (par exemple
ApiClient
) et l'utilisation partagée cURL gestionnaire, seul changement d'URL pour chaque demande. Aussi coupé les demandes pour la résolution de nom et d'utilisation au format gzip réponse.J'avais besoin de traiter environ 1 million d'entités chaque jour à partir d'une API de serveur qui nous limite à utiliser une seule connexion simultanée. J'ai créé cette catégorie. J'espère que ça aidera d'autres personnes dans l'optimisation de leur curl demandes.
Aussi, si vous n'avez pas de limitations d'avoir une seule connexion avec le serveur, vous pouvez utiliser
curl_multi_*
fonctions.OriginalL'auteur Michael Sivolobov
Essayez d'utiliser vpi-4. À défaut curl utilise vpi-6 et de son lent. J'ai ajouté --ipv4 paramètre à ma commande curl et des baisses de coût de 8 secondes à 4 deuxième
OriginalL'auteur mustafa candan