javascript - 将相同的数据存储到 storage.sync 中,Chrome 使用的配额比 Firefox 多得多
问题描述
背景
我正在开发一个浏览器插件(webextension API),它是跨浏览器(Firefox & Chromium/Chrome/Blink)。
我需要使用browser.storage.sync
(chrome.storage.sync
在 Chrome 上)来存储,以便可以同步数据。
storage.sync
限制存储大小(128kB),所以我尝试了这些 JS 压缩库:
(lzutf8
压缩导致尺寸更小)
使用压缩库
以上两个都支持uint8Array
输出,但是当我尝试存储时,uint8Array
它们storage.sync
大约大了 10 倍,显然没有真正以uint8
格式存储。
然后我发现压缩成字符串是最好的存储方式:
Y1 = LZUTF8.compress(input-data, {outputEncoding: "StorageBinaryString"});
Y2 = LZString.compressToUTF16(input-data)
(两个 Y 都是 UTF16 字符串)
问题
将压缩数据 Y(字符串)存储到 Firefox(78)和 Chromium(90)中,它占用的空间storage.sync
不同:
- 在 Firefox 中:使用的字节数 =
Y.length
. - 在 Chromium 中:使用的字节数 = 大约 2-3 倍于
Y.length
. 为什么?
(使用的空间可以通过storage.sync.getBytesInUse()
.Firefox 和 Chromium 看到相同的 quata 限制:128k 字节)
我需要一些解释。我找不到任何关于如何(以及什么对象类型)数据存储在storage.sync
. 另外,如果有更好的压缩和存储(支持同步)解决方案,我会很高兴。
解决方案
推荐阅读
- javascript - 如何从 python 传递值以选择 html 表单上的标签?
- javascript - Laravel 7 Auth / fullcalendar 4 登录导致 JSON Feed 而不是 /home
- node.js - Shopify API:使用特定 DiscountCode 检索订单
- r - 用特定列上的条件替换值
- android - android - 使用 BottomNavigationView 和 FrameLayout 实现 DrawerLayout
- android-studio - Android Studio - KorGE 插件 - build.gradle
- javascript - 将光标移动到 Safari 上的另一个菜单后,下拉菜单会留下残留物
- python - PyGame 屏幕不填充和翻转
- python - vscode 中的 MagicPython(.gyp) 到 Python(.py)
- php - Laravel URL 重写和路由