目前我在sqlite数据库中的cordova app中将图像存储为base64字符串localy以获得离线支持。有没有人知道使用cordova-plugin文件将它们存储为文件是否更好/更快?或者有更好的方法来存储图像以供离线支持吗?该主题的任何建议或经验?谢谢
答案 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数据库的设计目标。 但是,在您的情况下,性能可能不是一个问题,因此您的解决方案可能就足够了。