我使用 HTML5 + WebSQL 开发了一个应用程序,它可以将数据从本地数据库同步到服务器。
删除数据后,sqlite数据库文件大小不变。我知道这包含空白空间,当插入新数据时它将被填充,但由于限制,我想保持尽可能小的大小。
我知道 sqlite 中的 VACUUM 命令可以压缩数据库并删除未使用的空间,但是当我尝试从 JavaScript 在 WebSQL 数据库上运行它时,它失败并显示错误“逻辑错误或缺少数据库”。从浏览器外部运行命令工作正常。
我的问题是:
可以从 JavaScript 以某种方式执行 VACUUM 命令吗?
浏览器会自动执行此操作吗?它最终会被调用吗? (找不到关于此的任何文档)
感谢您的帮助。
最佳答案
由于 WebSQL 的放弃/工作停止的性质,错误/功能请求不会——也不会——永远得到尊重。 Chromium 错误也存在同样的问题,例如,没有响应。
看来你的两个问题是最坏的情况:
1:因为vacuum命令只有在没有连接数据库的情况下才能运行,所以只能在命令行运行。似乎在浏览器或 javascript 中没有“断开数据库连接然后运行 VACUUM”命令。
2:不要指望它。目前尚不清楚它是否会在达到最大大小限制时运行,即使它运行了,您也会在达到最大大小限制之前很久就注意到速度明显下降。
最多您可能能够向插件或 javascript 上下文之外的东西发送命令,它本身可以运行命令...现在已弃用,因此它是一个有争议的问题。对于遗留应用程序,如果您必须拥有该功能,则必须在简单的网页/js 上下文之外完成。
future /现代应用程序现在使用 IndexedDB;仅针对遗留应用程序回答了此问题。
关于sqlite - 如何从 JavaScript 压缩 WebSQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6763981/