2009-12-29 73 views
9

Todo,CURL con PHP - Muy lento

Tengo que solicitar una URL que devuelve una solicitud JSON. Estoy usando PHP y CURL para hacer esto. Actualmente, la solicitud y la respuesta tardan entre 3 y 4 segundos.

El siguiente es el código de rizo

$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); 
    } 

siguiente es la matriz curl_getinfo

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 
) 

¿Cómo puedo acelerar el tiempo de procesamiento CURL?

Gracias

+0

¿Cuánto tiempo demora si visitas '$ desturl' con tu navegador? Si eso también toma 3-4 segundos, no creo que cURL tenga la culpa. –

+0

En realidad, es bastante rápido si visito la URL explícitamente. Menos de 2 segundos – Jake

+0

También descubrí que el ajuste de CURLOPT_TIMEOUT obliga a cURL a usar ese tiempo, es mejor no establecer esta constante y dejar que cURL curve –

Respuesta

4

parece que la mayoría de las veces está a la espera de que el servidor responda (starttransfer_time - pretransfer_time = 1.620026) ... tal vez el servidor está haciendo alguna base de datos u otra operación que lleva tiempo?

+1

de alguna forma para reducir el namelookup_time? – Jake

+0

usa la ip en lugar del nombre. – Femaref

+0

puede agregarlo a/etc/hosts o especificar la dirección IP (con un host: encabezado) – jspcal

3

Tuve un problema así, usando wget fue rápido (1 segundo máximo), usando cURL tardó unos 5 segundos en obtener la página, cuando tcpdump-ing encontré que cURL intenta hacer una búsqueda inversa de DNS , y si el servidor no tiene el DNS de reversión registrado, lo ralentizará, configuré un DNS inverso en mi servidor DNS local, por lo que cada solicitud a ese sitio usando cURL ahora es muy rápida. No encontré la forma de deshabilitar la búsqueda reversible de DNS desde la configuración de CURSOR.

Mi sugerencia es analizar su tráfico para ver dónde está esperando tanto tiempo.

4

Según this answer (problema similar) rizo puede ser lento si se encuentra en Mac OS X y permite acceder a su proyecto con xxxx.local (con 127.0.0.1 myproject.local en su /etc/hosts/

Como @lepix dijo:

es porque el dominio de nivel superior .local está reservado para el servicio Bonjour, y esto desde Mac OS X Lion (10.7).

espero que se le lp, gracias a lepix.