Javascript 将大型JSON/JS对象从内容脚本压缩到background.JS-chrome扩展

Javascript 将大型JSON/JS对象从内容脚本压缩到background.JS-chrome扩展,javascript,google-chrome-extension,javascript-objects,compression,Javascript,Google Chrome Extension,Javascript Objects,Compression,我想将一个大型JSON/JS对象从content.JS发送到background.JS 我已经尝试使用库lz字符串来压缩对象 content.js background.js 这样,background.js中uncompressedJSON的值为null 但是,如果我使用LZString.decompress在content.js中解压相同的字符串compressedJSON,它会工作 我想知道UTF编码是否与此有关。这个库似乎工作得很好,因为我能够将我的对象压缩大约78% 欢迎对其他图书馆提

我想将一个大型JSON/JS对象从content.JS发送到background.JS

我已经尝试使用库lz字符串来压缩对象

content.js

background.js

这样,background.js中uncompressedJSON的值为null

但是,如果我使用LZString.decompress在content.js中解压相同的字符串compressedJSON,它会工作

我想知道UTF编码是否与此有关。这个库似乎工作得很好,因为我能够将我的对象压缩大约78%

欢迎对其他图书馆提出建议

使用LZString.compressToUTF16和LZString.decompressFromUTF16:

compressToUTF16生成有效的UTF-16字符串,因为所有浏览器都可以安全地存储这些字符串。因此,它们可以存储在经过IE9-10、Firefox、Android、Chrome和Safari测试的所有浏览器上的localStorage中。可以使用UTF16中的decompressFromUTF16进行解压缩。每个字符只使用15位的存储空间。因此,产生的字符串比压缩产生的字符串大6.66%


但是,发送未压缩的JSON要快得多。stringify会生成32MB的字符串块和块数,然后将它们组合到后台脚本中。

1除非数据超过64MB,否则无需传输压缩字符串,因为它比仅发送原始数据慢10-100500倍,2由于后台页面是一个单独的页面,您也需要在那里加载lz字符串脚本,3尝试使用compressToUTF16@wOxxOm我的对象大于64MB,并且我已经在background.js中成功导入了lz字符串。它适用于小型简单的非嵌套对象,但适用于大型对象时失败。@wOxxOm compressToUTF16工作正常!谢谢你的建议。如果你能加上这个作为答案,我可以投票和明星!
var compressedJSON = LZString.compress(JSON.stringify(largeObject));
chrome.runtime.sendMessage({type: "type1", result: compressedJSON}, function(response){
  // handle response
});
var uncompressedJSON = JSON.parse(LZString.decompress(request.result));