【发布时间】:2011-07-16 12:54:39
【问题描述】:
我需要一种方法在我的站点中的 PhoneGap 中缓存图像和 html 文件。我计划让用户在没有互联网连接的情况下看到网站,就像它一样。但我只看到有关 sql 数据存储的信息,但我如何存储图像(并稍后使用)。
【问题讨论】:
我需要一种方法在我的站点中的 PhoneGap 中缓存图像和 html 文件。我计划让用户在没有互联网连接的情况下看到网站,就像它一样。但我只看到有关 sql 数据存储的信息,但我如何存储图像(并稍后使用)。
【问题讨论】:
要缓存图像,请查看这个库——我是它的创建者——: imgcache.js .它的设计目的是使用本地文件系统缓存图像。如果您查看示例,您会发现它还可以检测何时无法加载图像(因为您处于离线状态或连接非常糟糕),然后自动将其替换为缓存的图像。 webapp 的用户甚至没有注意到它处于离线状态。
至于 html 页面.. 如果它们是 html 静态文件,它们可以本地存储在 web 应用程序中(file:// 在 phonegap 中)。 如果它们是动态生成的页面,如果您有少量数据,请检查 localStorage API,否则检查文件系统 API。
对于我的网络应用程序,我只从我的服务器检索 json 数据(并使用Backbone+Underscore 处理/呈现它)。 json 有效负载存储在 localStorage 中。如果应用程序离线,它将从本地存储而不是服务器获取 json 数据(Backbone.dualStorage 的自制分支)
然后您将获得完整的离线体验:页面+图像。
【讨论】:
像您可能需要进行简单离线操作的缓存并不那么容易。
您的第一个选项是cache manifest。它有一些限制(例如缓存的大小),但可能对您有用,因为它旨在满足您的需求。
另一个选项是您可以使用文件系统 API 将内容存储在设备的磁盘上。这有一些缺点,例如安全性以及您必须从不同于您通常从网络上加载的路径/url 加载文件的事实。查看hydra 插件以获取此示例。
最后一个选择可能是将内容存储在 localStorage 中(它的好处是在所有平台上都是私有的),然后在需要时将其从那里拉出来……这意味着对所有图像进行 base64 处理,因此这是一个与标准缓存有很大不同。
【讨论】:
缓存在 Android 操作系统上非常可行。但是如上所述,在 Apple 上,图像大小和缓存大小等存在限制。
如果您愿意在 iOS 上集成并允许缓存,您可以使用“缓存清单”来执行此操作。但请记住缺点和限制。 还 如果您想将文件保存到我的 App 下的 Documents 文件夹中,Apple 将拒绝您的 App。原因是iOS6以后系统将Documents文件夹下的所有数据备份到iCould,所以Apple不允许像图片或JSON文件这样可以从你的服务器再次同步的大数据保存在这个文件夹中。
所以还有另一种很好的解决方法所以可以使用 LocalFileSystem.TEMPORARY 代替。它不会将数据保存到Library/Cache,而是将数据保存到App的临时文件夹,该文件夹不会自动备份到iCloud,也不会自动删除。
问候 拉吉夫
【讨论】: