现在已经两周了。任何帮助将不胜感激。
问题:
我正在使用NSURLConnection从RESTfull Web服务获取JSON数据,要求是我无法进行延迟加载数据。每次登录用户打开应用程序时,需要在应用程序的第一个屏幕上处理一大块数据。我知道这不是一个聪明的事情,但无法帮助它。缓存是在本地Sqlite DB中完成的。我们正在使用Async NSURLConnection,它给我们的性能持续3-4秒。
我们尝试了同步NSURLConnection并找出异步NSURLConnection需要大约3-4秒来处理相同的请求。但同步NSURLConnection根本不可靠,它无法获得完整的JSON超过一半的时间。并且同步NSURLConnection和NSOperation的组合将无济于事。
我们尝试在一个单独的应用程序中进行调用,只是为了观察该特定请求的性能,并且仍然得到相同的结果。
所以,目前我们得到的完整请求的平均执行时间约为6-8秒。我们觉得我的第一个应用程序屏幕非常高。 (请告诉我,如果它不多,感觉对我来说是糟糕的用户体验)。
问题:
NSURLConnection不是执行此类请求的标准方式吗?
除了NSURLConnection之外,还有更好,更快(可靠)的方法吗?
我可以优化NSURLConnection的性能吗?如果是,请指出正确的方向。
有人试过CFHTTPStream吗?如果是,那么它在性能方面是否优于NSURLConenction?
由于
@GoZoner非常感谢您的回复。我们通过以下三种方式进行了测试
由于它是应用程序的第一个屏幕,所以没有应用程序执行任何其他操作的真实情况,结果仍然不同,并且使用Async一致性损失3-4秒。
我们在一个单独的测试应用程序中进行了一个原始调用,它只做了一个Web服务调用,结果仍然相同。
我们在设备和模拟器上进行了测试。在设备上,正如预期的那样,结果更糟,在Async NSURLConnection调用中大约4秒持续滞后。
我们也对可靠性问题感到惊讶,因为同步NSURLConnection不可靠是没有意义的。但在运行测试后,我们意识到它实际上不可靠,不是因为NSURLConnection库中的某些东西,而是因为3G或Wi-Fi连接不可靠所以呼叫主要是由于连接而断开(我的假设)。 Async NSURLConnection可以很好地处理这个特殊问题,因为它一直在调用和附加数据,直到收到的数据完成为止(这有时会超过10-12次尝试附加数据来完成JSON)。由于同步NSURLConenction只进行了一次获取数据的尝试,因此在不可靠的移动网络连接中失败了。
@Andrea感谢您的回复:)肯定会给YAJL一个旋转。但我相信问题更多的是连接而不是解析JSON,我可能是错的。 YAJL是否有可靠的连接处理机制?
期待更多回复,您的建议和意见实际上非常有价值:)
由于
答案 0 :(得分:1)
尝试使用ASIHttpRequest,响应时间可能比NSURLConnection快。