微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决将相同的数据存储到 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.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?