将相同的数据存储到 storage.sync 中,Chrome 使用的配额比 Firefox 多得多

问题描述

我正在开发 webextension 浏览器插件 (link)。我计划它是跨浏览器的(Firefox 和 Chromium/Chrome/Blink)。

我需要使用 browser.storage.sync(Chrome 上的 chrome.storage.sync)来存储用户输入的 JSON 字符串,以便用户自定义可以在用户的​​设备之间同步。

storage.sync 限制存储大小,所以我尝试了这些 JS 压缩库:

  • lzutf8(LZ77 算法)

    LZUTF8.compress(input-string,{outputEncoding: "StorageBinaryString"});
    
  • lz-string(LZW 算法)

    LZString.compresstoUTF16(string)
    

(lzutf8 将结果压缩成更小的尺寸)

以上两个都支持 uint8Array 输出,但是 当我尝试将 uint8Array 存储到 storage.sync 时,它们大约大了 10 倍,显然没有真正存储在 uint8 中格式。

然后我发现输出字符串是最好的存储方式。

将压缩数据(字符串)存储到 Firefox (78) 中可以正常工作browser.storage.sync 大小的项目与 String.length 相同。

存储到 Chromium (90) 也可以,但 chrome.storage.sync 大小的项目是 String.length 的 2-3 倍。

我需要一些解释。我找不到任何关于如何(以及什么对象类型)数据存储在 storage.sync 中的文档。另外,如果有更好的压缩和存储(支持同步)解决方案,我会很高兴。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...