在cordova应用程序中存储图像以供离线支持

时间:2017-11-26 11:59:06

标签: cordova

目前我在sqlite数据库中的cordova app中将图像存储为base64字符串localy以获得离线支持。有没有人知道使用cordova-plugin文件将它们存储为文件是否更好/更快?或者有更好的方法来存储图像以供离线支持吗?该主题的任何建议或经验?谢谢

1 个答案:

答案 0 :(得分:0)

这取决于您使用图像的方式以及性能对您的重要程度。

在我自己的基于Cordova的应用程序中,我下载地图图块图像以供离线使用,并使用HTML5画布显示它们。 因此,就我而言,性能对于确保地图的缩放/平移是平滑的非常重要。

在我的解决方案中,我使用cordova-plugin-file-transfer将包含图片的zip下载到cordova.file.cacheDirectory(请参阅cordova-plugin-file directories)。然后我使用cordova-plugin-zip将其解压缩到cordova.file.dataDirectory。我的应用程序通过在Javascript中创建new Image()个对象并将src属性设置为cordova.file.dataDirectory内的图像的本地路径来从文件中读取图像数据。然后我使用HTML5 Canvas drawImage() function将图像数据复制到画布。 此过程的性能非常高效,可在Android和iOS设备上平滑地平移/缩放地图图块。

但是,由于iOS WKWebView中缺少对file://协议的支持,我不得不继续在iOS上使用UIWebView(对我来说没有cordova-plugin-wkwebview-engine)。 我为WKWebView尝试了一些解决方法,包括通过与WKWebView插件捆绑的本地Web服务器(即http://localhost:8080/path/to/myimage.png)读取图像,通过cordova-plugin-file读取图像作为数组缓冲区,并以图像形式读取图像-64通过cordova-plugin-file,但所有这些都证明了地图无法使用的程度。

我怀疑你从SQLite DB存储和检索图像数据的技术也不具备效果 - 存储二进制数据的blob并不是SQL数据库的设计目标。 但是,在您的情况下,性能可能不是一个问题,因此您的解决方案可能就足够了。