我有一个非常奇怪的问题,在Android中,API调用需要300-500毫秒,而在iOS中需要1.5-2.5秒。我已经删除了依赖项,例如我的服务器,设备特定问题,互联网连接等。我有一个非常简单的示例代码命中示例URL,对我来说,即使在模拟器上也需要大约2秒。
dispatch_async(dispatch_get_global_queue(0, 0), ^{
NSLog(@"start");
// 1
NSURL *url = [NSURL URLWithString:@"https://httpbin.org/get"];
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *session = [NSURLSession sessionWithConfiguration:config];
// 2
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
[request setValue:@"" forHTTPHeaderField:@"Accept-Encoding"];
request.HTTPMethod = @"GET";
[[session dataTaskWithRequest:request
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
// Handle response here
NSLog(@"end - %ld", (long)[(NSHTTPURLResponse*)response statusCode]);
}] resume];
});
我也尝试过使用AFNetworking和ASSIHTTP库,但没有区别。我也检查了标题,它们在Android和iOS中都是相同的。我在这里做错了什么?
答案 0 :(得分:0)
您可以在请求生成,发送,回调分析时注销时间戳(NSLog已经执行)。
答案 1 :(得分:0)
服务器端代码是否根据'user-agent'进行任何处理? 如果您在iOS Safari中和应用内打开网址,会有时差吗?
您可以尝试从邮递员(或其他REST API测试工具,如firefox RESTClient)调用api,并覆盖用户代理以使用iOS值(http://www.enterpriseios.com/wiki/UserAgent)。如果时差仍然相同,那么您在移动代码中无法解决这个问题。
P.S。 : 1.在邮递员中覆盖用户代理需要一些调整:https://github.com/postmanlabs/postman-app-support/wiki/Postman-Proxy
答案 2 :(得分:0)
我认为你的问题不在网络中,而是在这一行:
dispatch_async(dispatch_get_global_queue(0, 0), ^{
您可以将其删除并再次查看吗?
数据任务是异步的,因此您不需要将其包装在另一个异步块中。
此外,您不需要为每个请求创建NSURLSession
的实例