2010-08-21 16 views
5

Estoy tratando de comprender el rendimiento NSURLConnection en una red 3G desde un iPhone. Tengo el siguiente código de pruebaNSURLConexión de optimización

-(void)doTest2 { 
    max = 5; 
    NSURL *url = [NSURL URLWithString:@"http://www.google.com"]; 
    NSURLRequest *request2 = [[[NSURLRequest alloc] initWithURL:url] autorelease]; 
    NSURLConnection *conn=[[NSURLConnection alloc] initWithRequest:request2 delegate:self]; 
    self.startDate = [NSDate date]; 
    if (conn) 
    { 
     receivedData = [[NSMutableData data] retain]; 
    } } 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 
     self.endDate = [NSDate date]; 
     NSTimeInterval interval = [self.endDate  timeIntervalSinceDate:self.startDate]; 
     NSLog(@"Time:%f Size:%u", interval, [receivedData length]); 
     [receivedData release]; 

     count = count + 1; 
     if (count == max) { 
      count = 0; 
      sleep(3); 
     } 
     self.doTest2;} 

La primera solicitud es lenta (más de 1 segundo). Las solicitudes 2-5 son rápidas (menos de .25 segundos). Si duermo durante 3 o más segundos, la primera solicitud después del sueño es lenta. Pero si duermo menos de 3 segundos, es rápido. ¿Alguna idea de por qué?

Respuesta

2

Puede haber una serie de razones: en la primera solicitud, la pila TCP debe resolver el nombre DNS de google.com, luego se almacena en caché. Además, puede necesitar algo de tiempo para inicializar la red 3G.

2

No encuentro un enlace que respalde mi teoría, pero en la WWDC 2010, los ingenieros de Apple insistieron repetidamente en el consumo de energía en iPhone, indicando que la especificación 3G requería que la radio se mantuviera en un estado de alta potencia durante un período de tiempo después de la última transmisión. Supongo que esperar 3 segundos permite que la radio esté inactiva, y la siguiente transmisión requiere que se encienda y renegocie con la torre de la célula.

1

FTP es un protocolo con estado, por lo que la comunicación debe inicializarse. Necesita autenticarse y enviar cierta información al servidor. Por lo tanto, la primera vez lleva más tiempo.