【问题标题】:Network calls take more time on iOS than on Android网络通话在 iOS 上比在 Android 上花费更多时间
【发布时间】:2017-04-24 07:31:36
【问题描述】:

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

【问题讨论】:

  • 嗨,我已经用单一 API 尝试过你的代码,但它仍然需要 1.62 秒,在服务器中签入响应时间仅显示 500 毫秒。有什么解决办法吗?

标签: ios


【解决方案1】:

我认为您的问题不在网络上,而是在这一行: dispatch_async(dispatch_get_global_queue(0, 0), ^{

你能把它去掉再检查一下吗?

数据任务是异步的,因此您无需将其包装在另一个异步块中。

您也不需要为每个请求创建NSURLSession 的实例

【讨论】:

  • 唯一提高响应时间的是使用相同的 NSURLSession 对象。我可以为多个同时调用重复使用相同的 NSURLSession 吗?我怀疑它不会被允许。
  • 是的,你可以。在您向同一主机发出请求之前,重复使用会话是绝对可以的。换句话说,一个会话一个主持人。
  • 似乎这是问题所在,我不得不为所有调用重用 NSURLSession 来修复它。谢谢。
  • 嗨@sage444,我已经尝试过使用单个API,但仍然需要1.62秒,在服务器中检查响应时间仅显示500毫秒。有什么解决办法吗?
【解决方案2】:

可以在请求生成、发送、回调时注销时间戳(NSLog已经做过)来分析。

【讨论】:

    【解决方案3】:

    服务器端代码是否基于“用户代理”进行任何处理? 在 iOS safari 和应用内打开 url 有时间差吗?

    您可以尝试从邮递员(或其他 REST API 测试工具,如 firefox RESTClient)调用 api,并覆盖用户代理以使用 iOS 值 (http://www.enterpriseios.com/wiki/UserAgent)。如果时差仍然相同,则您无法在移动代码中执行任何操作来解决此延迟问题。

    附: : 1. 在邮递员中覆盖用户代理需要一些调整:https://github.com/postmanlabs/postman-app-support/wiki/Postman-Proxy

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-09-30
      • 2020-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多