4

两周来一直在努力解决这个问题。任何帮助将不胜感激。

问题:

我正在使用 NSURLConnection 从 RESTfull Web 服务获取 JSON 数据,要求是我不能延迟加载数据。这是每次登录用户打开应用程序时需要在应用程序的第一个屏幕上处理的一大块数据。我知道这不是一件聪明的事,但我无能为力。缓存正在本地 Sqlite DB 中完成。我们正在使用 Async NSURLConnection,它给我们带来了持续 3-4 秒的性能打击。

我们尝试了 Sync NSURLConnection 并发现 Async NSURLConnection 需要大约 3-4 秒的额外时间来处理相同的请求。但是 Sync NSURLConnection 根本不可靠,超过一半的时间它无法获取完整的 JSON。将 Sync NSURLConnection 与 NSOperation 结合起来也无济于事。

我们尝试在单独的应用程序中进行调用,只是为了观察该特定请求的性能,但仍然得到相同的结果。

因此,目前我们得到的完整请求的平均执行时间约为 6-8 秒。对于您的应用程序的第一个屏幕,我们觉得我非常满意。(如果它不多,请告诉我,这对我来说感觉像是糟糕的用户体验)。

问题:

NSURLConnection 不是执行此类请求的标准方式吗?

除了 NSURLConnection 之外,还有更好更快(可靠)的方法吗?

我可以优化 NSURLConnection 的性能吗?如果是,请指出我正确的方向。

有人试过 CFHTTPStream 吗?如果是,那么它在性能方面是否比 NSURLConenction 更好?

谢谢


@GoZoner 非常感谢您的回复。我们通过以下三种方式进行了测试

  1. 由于它是应用程序的第一个屏幕,因此没有应用程序执行其他任何操作的真实案例,但结果仍然不同,并且 Async 持续丢失 3-4 秒。

  2. 我们在一个单独的测试应用程序中进行了原始调用,该应用程序只执行了一个 Web 服务调用,但结果仍然相同。

  3. 我们在设备和模拟器上进行了测试。在设备上,正如预期的那样,结果更糟,在 Async NSURLConnection 调用中持续延迟大约 4 秒。

我们也对可靠性问题感到惊讶,因为 Sync NSURLConnection 不可靠几乎没有意义。但是在运行了无数次测试之后,我们意识到它实际上是不可靠的,不是因为 NSURLConnection 库中的某些东西,而是因为 3G 或 Wi-fi 连接不可靠,所以呼叫使用中断主要是由于连接(我的假设)。Async NSURLConnection 可以很好地处理这个特殊问题,因为它会一直调用和附加数据,直到接收到的数据完成为止。(有时可能需要 10-12 次尝试附加数据才能完成 JSON)。由于 Sync NSURLConenction 在获取数据方面只进行了一次尝试,因此它在不可靠的移动网络连接中惨遭失败。

@Andrea 感谢您的回复:) 肯定会给 YAJL 一个旋转。但我认为问题更多在于连接而不是解析JSON,我可能错了。YAJL 有可靠的连接处理机制吗?

期待更多的回复,您的建议和意见其实很有价值:)

谢谢

4

1 回答 1

1

尝试使用 ASIHttpRequest 的响应时间可能比 NSURLConnection 快。

于 2012-04-11T06:31:01.053 回答