将内容脚本中的大型JSON / JS对象压缩为background.js-Chrome扩展

时间:2018-08-23 15:51:13

标签: javascript google-chrome-extension javascript-objects compression

我想将一个大型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%。

也欢迎其他图书馆提出建议!

1 个答案:

答案 0 :(得分:1)

使用LZString.compressToUTF16LZString.decompressFromUTF16

  在所有浏览器都可以安全地存储它们的意义上,

compressToUTF16会生成“有效的” UTF-16字符串。因此它们可以存储在所有经过测试的浏览器(IE9-10,Firefox,Android,Chrome,Safari)上的localStorage中。可以使用decompressFromUTF16解压缩。每个字符仅使用15位存储空间即可工作。因此,产生的琴弦比压缩产生的琴弦大6.66%

但是,发送未压缩的JSON.stringify结果为32MB字符串块(以及块号),然后将它们组合到后台脚本中,仍然要快得多。