我有一个问题,我非常愿意接受建议(即使是非常奇怪的建议!)
我正在编写一个iPhone应用程序,它向服务器发出请求(带参数的网址)。作为响应,iPhone接收XML。平安无事。
现在,我希望通过测量执行某些任务所需的时间来提高我的应用程序的速度。我发现,在执行的所有任务(下载、XML解析、发送请求、处理请求、解析XML中的对象)中,下载实际的XML花费的时间最长。
现在,我的XML文件非常、非常、非常简单,而且非常非常小。我主要使用它们来读取类似RSS的数据,并在UITableView中显示它们。
我的应用程序运行得很好,没有什么让人感觉很慢的地方,但现在app Store中有一个应用程序与我的应用程序非常相似,但速度更快,感觉更“快”,如果你明白我的意思的话。它还具有从RSS-feed逐个加载标题的强大功能。
目前我正在尝试对我的数据进行gzip压缩,但这种压缩只会使我的数据只有原来的一半大小,而且似乎对性能并没有什么实际的好处。重要的是,在解析数据之前,必须先下载数据。这将是非常酷的‘流’的数据流,这是解析,因为它来了。这样,我可以几乎同时做两个工作,一个接一个地加载标题(使用户交互性更具吸引力)。
有谁知道如何提高我的表现吗?要么是通过很好的压缩技巧,要么是通过与服务器通信的完全不同的方式。欢迎大家光临!
更新:把服务器的延迟和响应性放在一边;我怎样才能让XML源‘流’到我的iPhone (逐字节下载),同时又能被解析?现在它是一个线性的下载->解析->显示的过程,但是它可以通过同时下载和解析而变得半并行(并在下载完成时显示每个项目,而不是在UITableView中同时加载所有项目)
发布于 2009-06-26 18:05:10
假设您使用的是NSXMLParser的initWithContentsOfURL:,这可能是问题的一部分。它似乎下载了URL的全部内容,然后将其交给解析器一次解析所有内容。
尽管NSXMLParser是一个事件驱动的解析器,但它似乎不支持以增量方式将数据流式传输到解析器。当然,您可以将NSXMLParser替换为以更合理的方式处理增量数据的其他解析库。
另一种方法是使用NSURLConnection,并创建一个新的NSXMLParser,并在每次有数据传入时重新解析数据,在您的NSURLConnection的委托的connection:didReceiveData: method中。您必须编写一些额外的代码来忽略多次重新解析文件开头时产生的额外事件。
这似乎比简单地获取其他库并对其进行调整要做更多的工作,但也可能不是,这取决于您如何处理表数据的下游创建。
发布于 2009-06-26 18:24:51
如果NSMutableArray是UITableView的底层数据结构,那么您应该尝试使用initWithContentsOfURL。在服务器上的格式需要在苹果"plist“xml,这是很容易生成的。我猜,如果cocoa已经有了处理xml所需的资源,那么使用它们会比创建自己的xml解析器实例更快。
发布于 2009-06-26 14:52:05
您是如何解析XML数据的。需要在接收到XML时对其进行解析,这就是拉式解析被发明出来的全部原因,而且他们拥有NSXMLParser事件驱动的解析器,可以对数据流进行操作……
这也意味着压缩数据会适得其反。
对于数量非常少的XML,速度问题可能与连接延迟有关。
因此,另一个重要因素可能是DNS查找。你可以事先自己做一次,并缓存IP,也许只在连接到服务器失败时才重新检查……
https://stackoverflow.com/questions/1049050
复制相似问题