我想将一个大型JSON / JS对象从content.js发送到background.js
我尝试使用库lz-string
来压缩对象。
content.js
var compressedJSON = LZString.compress(JSON.stringify(largeObject));
chrome.runtime.sendMessage({type: "type1", result: compressedJSON}, function(response){
// handle response
});
background.js
var uncompressedJSON = JSON.parse(LZString.decompress(request.result));
这样做,我在background.js中得到null
的{{1}}
但是,如果我使用uncompressedJSON
在content.js中解压缩相同的字符串compressedJSON
,那么它将起作用!
我想知道UTF编码是否与此有关。该库似乎运行得很好,因为我能够将对象压缩约78%。
也欢迎其他图书馆提出建议!
答案 0 :(得分:1)
使用LZString.compressToUTF16
和LZString.decompressFromUTF16
:
在所有浏览器都可以安全地存储它们的意义上,compressToUTF16会生成“有效的” UTF-16字符串。因此它们可以存储在所有经过测试的浏览器(IE9-10,Firefox,Android,Chrome,Safari)上的localStorage中。可以使用decompressFromUTF16解压缩。每个字符仅使用15位存储空间即可工作。因此,产生的琴弦比压缩产生的琴弦大6.66%
但是,发送未压缩的JSON.stringify结果为32MB字符串块(以及块号),然后将它们组合到后台脚本中,仍然要快得多。