我正在构建一个需要JSON数据的应用。我正在使用RESTful API的get调用,并使用和NSJSONSerialization来查看数据。为了减少启动时间,我正在记录完成所需的所有时间。在围绕此代码输入以下日志语句后,我注意到这个单个调用平均需要5秒才能完成。这次我能改进的任何方式吗?我只通过JSON获得了100个帖子,所以我无法想象这是它可以移动的最快。这是代码:
NSLog(@"Data Retrieval STARTED");
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:getURL]];
NSLog(@"Data Pull ENDED");
当我查看日志时,第一个Log语句和第二个语句总是相隔5秒,所以这是我的测试,不像Time Profiler那样准确,但我相信它。提示很感激。
答案 0 :(得分:1)
您应该使用curl(或类似)基线来比较5秒时间。在此之前,我认为它是服务器+交易,没有什么特别的与iOS相关。
无论如何,无论延迟如何,当应用程序阻止时,远程请求太长而无法同步执行。相反,首先要定义UI在请求期间可以执行的有趣/有用的事情(也许它只是一个微调器,或者可能是其他启动任务。请考虑周到这一点)。然后从NSURLRequest
创建NSURL
,并使用以下内容将其传递给NSURLConnection
:
+ (void)sendAsynchronousRequest:(NSURLRequest *)request queue:(NSOperationQueue *)queue completionHandler:(void (^)(NSURLResponse*, NSData*, NSError*))handler
在完成功能块中,解析响应并将您的用户界面恢复为" ready"。
答案 1 :(得分:0)
您可以改用dataWithContentsOfURL:options:error:
。对于选项参数,传入NSDataReadingUncached
,如果您的数据只被读取一次然后被丢弃,这将提高性能
第二个解决方案:
事先使用NSUrlConnection
打开连接,然后当您获得JSON文件时,没有额外的时间来首先打开连接。