5

我使用 HTML5 + WebSQL 开发了一个应用程序,它将数据从本地数据库同步到服务器。

删除数据时,sqlite 数据库文件的大小保持不变。我知道这包含空白空间,并且在插入新数据时会被填充,但由于限制,我希望尽可能小。

我知道 sqlite 中的 VACUUM 命令可以压缩数据库并删除未使用的空间,但是当我尝试从 JavaScript 在 WebSQL 数据库上运行它时,它会失败并显示错误“逻辑错误或缺少数据库”。从浏览器外部运行命令可以正常工作。

我的问题是:

  1. 可以从 JavaScript 以某种方式执行 VACUUM 命令吗?

  2. 浏览器是否会自动实现这一点,最终会被调用吗?(找不到任何关于此的文档)

谢谢你的帮助。

4

1 回答 1

4

由于 WebSQL 的废弃/工作停止性质,错误/功能请求不会 - 也不会 - 得到尊重。例如,同样的问题作为 Chromium 错误存在,没有响应。

您的两个问题似乎最糟糕的是:

1:因为vacuum命令只能在不连接数据库的情况下运行,所以只能从命令行运行。似乎在浏览器或 javascript 中没有“断开数据库然后运行 ​​VACUUM”命令。

2:不要指望它。尚不清楚它是否会在达到最大尺寸限制时运行,即使它确实会在达到最大尺寸限制之前很久就会注意到严重的减速。

最多您可以将命令发送到插件或javascript上下文之外的东西,这些插件本身可以运行命令......它现在已被弃用,所以它是一个有争议的问题。对于遗留应用程序,如果您必须拥有该功能,则必须在简单的网页/js 上下文之外完成。

未来/现代应用程序现在使用 IndexedDB;仅针对遗留应用程序回答了这个问题。

于 2013-03-15T20:37:07.593 回答