网络通话在iOS上比在Android上占用更多时间

时间:2017-04-24 07:31:37

标签: ios

我有一个非常奇怪的问题,在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中都是相同的。我在这里做错了什么?

3 个答案:

答案 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的实例