iPhone网络性能

iPhone网络性能,iphone,objective-c,xml,performance,networking,Iphone,Objective C,Xml,Performance,Networking,我有一个问题,我非常愿意接受建议(即使是非常奇怪的建议!) 我正在编写一个iPhone应用程序,它向服务器发出请求(带有参数的URL)。作为响应,iPhone接收XML。一切都很好 现在,我希望通过测量执行某些任务所需的时间来提高应用程序的速度。我发现,在执行的所有任务(下载、XML解析、发送请求、处理请求、从XML解析对象)中,下载实际的XML花费的时间最长 现在,我的XML文件非常、非常、非常简单,而且非常、非常、非常小。我主要使用它们来读取类似RSS的数据,并在UITableView中显示

我有一个问题,我非常愿意接受建议(即使是非常奇怪的建议!)

我正在编写一个iPhone应用程序,它向服务器发出请求(带有参数的URL)。作为响应,iPhone接收XML。一切都很好

现在,我希望通过测量执行某些任务所需的时间来提高应用程序的速度。我发现,在执行的所有任务(下载、XML解析、发送请求、处理请求、从XML解析对象)中,下载实际的XML花费的时间最长

现在,我的XML文件非常、非常、非常简单,而且非常、非常、非常小。我主要使用它们来读取类似RSS的数据,并在UITableView中显示它们

我的应用程序运行得很好,没有什么感觉很慢,但现在应用商店中有一个应用程序,它的功能与我的应用程序非常相似,但是速度更快,感觉更“快”,如果你知道我的意思的话。它还有一个很好的功能,可以从RSS提要中逐个加载标题

目前我正在尝试对数据进行gzip压缩,但这种压缩只会使数据大小减少一半,而且似乎对性能没有任何实际好处。最重要的是,在解析数据之前,必须先下载数据。如果有一个“流”的数据,当它进入时被解析,那将是非常酷的。这样,我几乎可以同时完成两项工作,并一个接一个地加载标题(使用户交互更具吸引力)

有人知道如何提高我的表现吗?无论是通过出色的压缩技巧,还是通过完全不同的方式与服务器通信。。欢迎光临


更新:把服务器的延迟和响应放在一边;如何将XML源“流式”传输到iPhone(逐字节下载)并同时进行解析?现在,它是一个下载->解析->显示的线性过程,但通过同时下载和解析(并在下载完成时显示每个项目,而不是在UITableView中同时加载所有项目),它可能会变得半并行。

如何解析XML数据。需要在收到XML时解析它是发明拉式解析的全部原因,而且他们有一个NSXMLParser事件驱动的解析器,可以对数据流进行操作

这也意味着数据压缩会适得其反

对于非常少量的XML,速度问题可能与连接延迟有关


因此,另一个重要因素可能是DNS查找。您可以事先自己做一次,然后缓存IP,也许只在连接到服务器失败时重新检查…

您是如何解析XML数据的。需要在收到XML时解析它是发明拉式解析的全部原因,而且他们有一个NSXMLParser事件驱动的解析器,可以对数据流进行操作

这也意味着数据压缩会适得其反

对于非常少量的XML,速度问题可能与连接延迟有关


因此,另一个重要因素可能是DNS查找。您可以事先自己做一次,然后缓存IP,也许只有在连接到服务器失败时才重新检查…

因为您的xml文件非常小(我想只有8k左右)。我不认为在解析它们时会看到很大的性能提升。您可以使用异步NSURLConnection来实现这一点,但我看不出它对小文件有多大帮助。您是否考虑过在服务器上生成XML文件所需的时间?您是使用PHP创建XML还是访问静态文件?出于测试目的,访问静态文件并查看它们之间的比较可能会很有趣

不久前我遇到了这样的问题,结果发现我服务器上的mySQL数据库速度很慢,这与我的应用程序毫无关系


另外,在下载和解析XML文档时,使用工具查看分配的内存量。一些XML解析器将整个XML文档加载到内存中,然后允许您随机索引到文档的元素中,而其他解析器只提供逐步解析。对于像iPhone这样的有限设备,循序渐进的方法要好得多,这可能是您正在使用的,但快速查看内存消耗情况应该会告诉您。

因为您的xml文件非常小(我想只有8k左右),我不认为您会在解析它们时看到很大的性能提升。您可以使用异步NSURLConnection来实现这一点,但我看不出它对小文件有多大帮助。您是否考虑过在服务器上生成XML文件所需的时间?您是使用PHP创建XML还是访问静态文件?出于测试目的,访问静态文件并查看它们之间的比较可能会很有趣

不久前我遇到了这样的问题,结果发现我服务器上的mySQL数据库速度很慢,这与我的应用程序毫无关系


另外,在下载和解析XML文档时,使用工具查看分配的内存量。一些XML解析器将整个XML文档加载到内存中,然后允许您随机索引到文档的元素中,而其他解析器只提供逐步解析。对于像iPhone这样的有限设备,分步方法要好得多,这可能是您正在使用的,但快速查看内存消耗情况应该会告诉您。

假设您使用的是NSXMLParser的initWithContentsOfURL:,这可能是问题的一部分。似乎是下载URL的全部内容,然后将其交给解析器一次解析所有内容

尽管NSXMLParser是一个事件驱动的解析器,但它似乎不支持以增量方式将数据流传输到解析器。当然,您可以将NSXMLParser替换为其他解析库