“清爽” iPhone / Mac OSX上的XML Feed
-
03-07-2019 - |
题
我很好奇那些正在构建基于REST / SOAP / XML-RPC的iPhone应用程序或只是简单地下拉动态XML Feed的人,当用户说“刷新”Feed时,这对你来说意味着什么? ?
直接的方法是填充一些集合,例如NSMutableArray,以及从Feed中删除的任何内容。如果UI上的小部件可用于刷新,我通常会执行以下操作:
[myMutableArray removeAllObjects];
// follow steps to repopulate myMutableArray
这似乎是刷新XML Feed的效率最低的算法。例如,许多正在构建Twitter客户端的人正在将更改添加到他们现有的Feed中,而不是再次以完整的形式关闭整个Feed。
您使用什么样的算法来“刷新”?与服务器端数据源通话时的模型?
谢谢大家。
解决方案
如果您需要OS X 10.5,则应该考虑使用PubSub框架。它明确地设计用于获取和更新RSS / Atom提要。
(免责声明:我在Apple时写了很多这样的框架:)
您的问题的答案是Feed本身效率低下。你可以通过
最小化这个-
使用HTTP“条件GET”,因此如果服务器上的Feed没有更改,您只需返回一个小的304响应。这为服务器和您节省了时间。 (如果你不使用条件获取,某些提要服务器,比如slashdot会禁止你!)
-
选中“Last-Modified:”回复日期。是的,即使您使用有条件的GET。某些服务器无法正确处理它们。如果日期未更改,请忽略该Feed。
-
将响应的原始数据与您获得的最后一个原始响应进行比较。如果相同,请忽略该Feed。 (某些服务器不支持条件获取或发送最后修改日期...)
-
现在你必须解析XML。
-
检查Feed本身的顶级修改日期(这在Atom和不同版本的RSS之间有所不同。)同样,如果它与上次相同,请忽略该Feed。
-
如果你到了这里,最有可能更新了Feed。最简单的方法是扔掉所有旧的保存条目,并用新的条目替换它们。但这意味着你不能保留已经从饲料结束时掉落的“历史性”条目。如果要这样做,则必须遍历刚刚解析的Feed中的每个条目,将其与持久存储中的相应条目匹配,并根据新条目更新持久条目。如果找不到持久的,请将其添加为新条目。 (对于每个条目不包含唯一GUID的蹩脚RSS源,匹配条目可能很难。您必须尝试比较固定链接和标题。哎呀。)
醇>
这整件事真是一团糟。要使一切行为正常并与所有破碎的源和服务器一起工作,需要做大量的工作;利用我的痛苦并使用PubSub,如果可以:)
其他提示
一种方法是在后台线程中使用内置的NSXML pull解析器,并将流中的条目与内存中的条目进行比较,仅更新已更改的内容。
我刚刚发布了一个开放源代码适用于iPhone的RSS / Atom Parser ,希望它可能属于某些人使用
我也很乐意听到你的想法!