CURL avec PHP - Très lent
Tous,
Je demande une URL qui renvoie un JSON demande. Je suis à l'aide de PHP et CURL pour ce faire. Actuellement, il prend environ 3 à 4 secondes pour la demande et la réponse.
Suivant est le curl code
$ch = curl_init();
$devnull = fopen('/tmp/curlcookie.txt', 'w');
curl_setopt($ch, CURLOPT_STDERR, $devnull);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_URL, $desturl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
$ret = curl_exec($ch);
curl_close($ch);
if ($devnull)
{
fclose($devnull);
}
Suivant est le CURL_GETINFO tableau
Array
(
[url] => https://xx.xx.xxx.xx/portalsite/tester
[content_type] => application/json
[http_code] => 200
[header_size] => 198
[request_size] => 835
[filetime] => -1
[ssl_verify_result] => 20
[redirect_count] => 0
[total_time] => 2.054561
[namelookup_time] => 6.5E-5
[connect_time] => 0.016048
[pretransfer_time] => 0.123947
[size_upload] => 699
[size_download] => 46735
[speed_download] => 22746
[speed_upload] => 340
[download_content_length] => 0
[upload_content_length] => 0
[starttransfer_time] => 1.743973
[redirect_time] => 0
)
Comment puis-je augmenter la vitesse de la boucle de temps de traitement?
Grâce
Combien de temps cela prend-il si vous visitez
C'est en fait assez rapide si je visite l'URL explicitement. Moins de 2 secondes
J'ai aussi trouvé que la mise CURLOPT_TIMEOUT forces cURL à utiliser qui dit temps, de son mieux pour ne pas définir cette constante et laissez cURL cURL
$desturl
avec votre navigateur? Si cela prend 3 à 4 secondes, je ne pense pas que cURL est à blâmer.C'est en fait assez rapide si je visite l'URL explicitement. Moins de 2 secondes
J'ai aussi trouvé que la mise CURLOPT_TIMEOUT forces cURL à utiliser qui dit temps, de son mieux pour ne pas définir cette constante et laissez cURL cURL
OriginalL'auteur Jake | 2009-12-29
Vous devez vous connecter pour publier un commentaire.
il semble que la plupart du temps est en attente de réponse du serveur (starttransfer_time - pretransfer_time = 1.620026)... peut-être que le serveur est en train de faire une base de données ou à une autre opération qui prend du temps?
utiliser l'ip au lieu du nom.
vous pourriez ajouter à /etc/hosts ou spécifier l'adresse ip (avec un en-tête Host:)
Je suis l'aide de la propriété intellectuelle. Toujours le même. 🙁 Je me demande si c'est besoin d'être dans /etc/resolv.conf?
je suppose que le nom d'hôte a été mis en cache (la recherche de touques 65 microsecs)
OriginalL'auteur jspcal
Selon cette réponse (problème similaire) boucle peut être lent si vous êtes sur Mac OS X et que vous accédez à votre projet avec
xxxx.local
(avec127.0.0.1 myproject.local
dans votre/etc/hosts/
@Lepix dit:
Espère que ça va aider, grâce à lepix.
OriginalL'auteur rap-2-h
J'ai eu quelques problème comme ça, à l'aide de wget il a été rapide (1 seconde max), à l'aide de cURL il a fallu environ 5 secondes pour obtenir la page, lorsque tcpdump-ing, j'ai trouvé que cURL essayer de faire un reverse DNS lookup, et si le serveur n'a pas le reverse DNS inscrit il va vous ralentir, j'ai mis en place un reverse DNS sur mon serveur DNS local, de sorte que chaque demande à ce site à l'aide de cURL maintenant va très vite. Je n'ai pas trouver un moyen de le désactiver de reverse DNS lookup de cURL paramètres.
Ma sugestion est d'analyser votre trafic en ligne pour voir où il est attendu si longtemps.
OriginalL'auteur Radu Maris