Ben Copsey

Use magic to narrow the NSURLConnection performance gap to almost nothing :)

This diff is collapsed. Click to expand it.
@@ -24,7 +24,8 @@ @@ -24,7 +24,8 @@
24 24
25 - (void)setUp 25 - (void)setUp
26 { 26 {
27 - [self setTestURL:[NSURL URLWithString:@"http://allseeing-i.com"]]; 27 + [self setTestURL:[NSURL URLWithString:@"http://allseeing-i.com/ASIHTTPRequest/tests/the_great_american_novel_%28abridged%29.txt"]];
  28 + //[self setTestURL:[NSURL URLWithString:@"http://allseeing-i.com"]];
28 } 29 }
29 30
30 - (void)testASIHTTPRequestSynchronousPerformance 31 - (void)testASIHTTPRequestSynchronousPerformance
@@ -47,7 +48,6 @@ @@ -47,7 +48,6 @@
47 [request addRequestHeader:@"Accept-Language" value:@"en/us"]; 48 [request addRequestHeader:@"Accept-Language" value:@"en/us"];
48 [request setUseCookiePersistance:NO]; 49 [request setUseCookiePersistance:NO];
49 [request setUseSessionPersistance:NO]; 50 [request setUseSessionPersistance:NO];
50 - //[request setShouldRunInBackgroundThread:YES];  
51 [request startSynchronous]; 51 [request startSynchronous];
52 if ([request error]) { 52 if ([request error]) {
53 NSLog(@"Request failed - cannot proceed with test"); 53 NSLog(@"Request failed - cannot proceed with test");
@@ -116,7 +116,7 @@ @@ -116,7 +116,7 @@
116 [self performSelectorOnMainThread:@selector(startASIHTTPRequests) withObject:nil waitUntilDone:NO]; 116 [self performSelectorOnMainThread:@selector(startASIHTTPRequests) withObject:nil waitUntilDone:NO];
117 } 117 }
118 118
119 -- (void)testASIHTTPRequestAsyncPerformanceWithQueue 119 +- (void)testQueuedASIHTTPRequestAsyncPerformance
120 { 120 {
121 [self performSelectorOnMainThread:@selector(startASIHTTPRequestsWithQueue) withObject:nil waitUntilDone:NO]; 121 [self performSelectorOnMainThread:@selector(startASIHTTPRequestsWithQueue) withObject:nil waitUntilDone:NO];
122 } 122 }
@@ -129,13 +129,15 @@ @@ -129,13 +129,15 @@
129 [self setTestStartDate:[NSDate date]]; 129 [self setTestStartDate:[NSDate date]];
130 int i; 130 int i;
131 for (i=0; i<10; i++) { 131 for (i=0; i<10; i++) {
132 - ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:@"http://allseeing-i.com/ASIHTTPRequest/tests/the_great_american_novel_(abridged).txt"]]; 132 + ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:testURL];
133 //Send the same headers as NSURLRequest 133 //Send the same headers as NSURLRequest
134 [request addRequestHeader:@"Pragma" value:@"no-cache"]; 134 [request addRequestHeader:@"Pragma" value:@"no-cache"];
135 [request addRequestHeader:@"Accept" value:@"*/*"]; 135 [request addRequestHeader:@"Accept" value:@"*/*"];
136 [request addRequestHeader:@"Accept-Language" value:@"en/us"]; 136 [request addRequestHeader:@"Accept-Language" value:@"en/us"];
  137 + [request setUseCookiePersistance:NO];
  138 + [request setUseSessionPersistance:NO];
137 [request setDelegate:self]; 139 [request setDelegate:self];
138 - [request start]; 140 + [request startAsynchronous];
139 } 141 }
140 } 142 }
141 143
@@ -146,13 +148,17 @@ @@ -146,13 +148,17 @@
146 [self setTestStartDate:[NSDate date]]; 148 [self setTestStartDate:[NSDate date]];
147 int i; 149 int i;
148 NSOperationQueue *queue = [[[NSOperationQueue alloc] init] autorelease]; 150 NSOperationQueue *queue = [[[NSOperationQueue alloc] init] autorelease];
  151 + [queue setMaxConcurrentOperationCount:4];
149 for (i=0; i<10; i++) { 152 for (i=0; i<10; i++) {
150 - ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:@"http://allseeing-i.com/ASIHTTPRequest/tests/the_great_american_novel_(abridged).txt"]]; 153 + ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:testURL];
151 //Send the same headers as NSURLRequest 154 //Send the same headers as NSURLRequest
152 [request addRequestHeader:@"Pragma" value:@"no-cache"]; 155 [request addRequestHeader:@"Pragma" value:@"no-cache"];
153 [request addRequestHeader:@"Accept" value:@"*/*"]; 156 [request addRequestHeader:@"Accept" value:@"*/*"];
154 [request addRequestHeader:@"Accept-Language" value:@"en/us"]; 157 [request addRequestHeader:@"Accept-Language" value:@"en/us"];
  158 + [request setUseCookiePersistance:NO];
  159 + [request setUseSessionPersistance:NO];
155 [request setDelegate:self]; 160 [request setDelegate:self];
  161 + [request setShouldRunInBackgroundThread:YES];
156 [queue addOperation:request]; 162 [queue addOperation:request];
157 } 163 }
158 } 164 }
@@ -185,7 +191,7 @@ @@ -185,7 +191,7 @@
185 191
186 int i; 192 int i;
187 for (i=0; i<10; i++) { 193 for (i=0; i<10; i++) {
188 - NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://allseeing-i.com/ASIHTTPRequest/tests/the_great_american_novel_(abridged).txt"] cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10]; 194 + NSURLRequest *request = [NSURLRequest requestWithURL:testURL cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10];
189 [[self responseData] addObject:[NSMutableData data]]; 195 [[self responseData] addObject:[NSMutableData data]];
190 NSURLConnectionSubclass *connection = [[[NSURLConnectionSubclass alloc] initWithRequest:request delegate:self startImmediately:YES] autorelease]; 196 NSURLConnectionSubclass *connection = [[[NSURLConnectionSubclass alloc] initWithRequest:request delegate:self startImmediately:YES] autorelease];
191 [connection setTag:i]; 197 [connection setTag:i];