我该如何在我的iPhone应用中缓存Javascript和JSON数据?

4
我正在使用Titanium开发一个本地iPhone应用程序。 在这个应用程序中,我正在使用来自远程API的数据(该API是我在Rails 3中开发的)。 我希望用户尽可能地将API数据缓存到他们的手机上。 我需要帮助的是缓存的概念。最好的方法是什么? API中的数据的性质需要保持最新状态,因为它是随时可能更改的联系人数据。
我不知道缓存过程如何工作。如果有人能够解释最佳管理API缓存过程的方法,我将非常高兴!
我正在使用JSON和Javascript。
4个回答

1
"API中的数据性质需要保持最新状态,因为它是可能随时更改的联系人数据。如果是这样,那么任何类型的缓存都变得无意义,因为您需要将缓存与实时数据进行比较以检查更改,从而使缓存本身变得无意义。您仍然想要缓存数据的唯一原因是使其脱机可用。在这种情况下,我建议使用iPhone本地的SQLite数据库。"

1
你可以拥有某种API,告诉你用户数据上次更改的时间。这样,你就不必获取所有他们的数据,只需基于你传递给API的日期得到一个是/否的答案即可。 - ceejayoz

1

titanium-cache 是带有单元测试的干净代码,并在自述文件中提供了一些示例代码。我只花了几分钟就将其与我的项目集成起来,效果很好。


你能否在回答中加入一些文字,而不仅仅是链接? - Paŭlo Ebermann
不是完美的,但比以前好了。谢谢。 - Paŭlo Ebermann

0

我认为缓存的类型取决于应用程序。

您可以在以下位置缓存数据:

  1. 客户端;
  2. 服务器;
  3. 其他网络元素。

关键点是数据的刷新。糟糕的算法会产生不一致的数据。

您可以在分布式系统文献中找到有趣的信息。

再见。


由于这是一个iPhone应用程序,我将使用客户端缓存,可能会使用本地数据库或文件系统上的文件。 - Jonathan Clark
你可以使用类似于Web浏览器缓存的方法。 - m.genova
应用程序可以使用本地数据库(iPhone的本地SQLite数据库)来保存数据,然后应用程序评估请求(刷新)数据的可能性。Web浏览器通过HTTP请求检查资源的修改时间,如果缓存资源的时间值与更改的值不同,则浏览器使用另一个HTTP请求获取新资源。 - m.genova

0

这里有几个选项。

1)您可以使用ASIHTTPRequest并忽略缓存头来缓存所有内容。当您的应用程序正在使用时,您可以检测缓存是否被命中。如果它被命中,您可以在缓存命中后向服务器发出请求以请求任何新数据。您可以通过将随机URL参数附加到URL末尾来执行此操作,因为缓存基于URL。如果您拥有良好的连接和新数据,请加载它。否则不做任何事情,当用户在良好的连接下使用应用程序时,他们将获得最新的数据

2)通过始终访问缓存而不是在访问缓存后触发同一请求的不可缓存版本,触发不可缓存的时间戳检查以查看数据是否已更新,从而完成大部分#1。如果已经更新,则触发不可缓存的完整API请求。如果没有或失败,则无法执行任何操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接