如何将大量数据从chrome.storage.local传输到JSON文件?

时间:2018-11-26 13:22:29

标签: google-chrome-extension

我正在创建一个Chrome扩展程序,该扩展程序可以在chrome.storage.local中存储大量数据。 “很多”是指当我运行类似这样的内容时:

chrome.storage.local.getBytesInUse(i => console.log(i))

...我打印150873495,表明我正在存储约150 MB。我希望能够存储更多的东西。我知道,Chrome扩展程序中有很多数据,但是它将在我自己的计算机上运行。

我以前发布过How can I retrieve lots of data in chrome.storage.local?,该问题已通过Chrome中的错误修复得到解决。现在我有另一个问题。

我想将chrome.storage.local中的所有数据传输到某种文本文件(例如JSON)。但是,当我运行像这样简单的东西时:

chrome.storage.local.get(
    null,
    result => {
      console.log("Records retrieved");
    }
);

...我的扩展程序(在Chrome任务管理器中找到)的内存使用量猛增至约2.4 GB,比{{1}中的磁盘上的数据占用的150 MB高出一个数量级。 }。假设我要使用Chrome Extension: Local Storage, how to export中描述的方法将此数据保存到文件中。我需要打电话给chrome.storage.local

JSON.stringify

它永远不会到达“ JSON字符串长度”注释,因为chrome.storage.local.get( null, result => { console.log("Records retrieved"); const json = JSON.stringify(result); console.log("JSON string length: " + json.length); } ); 调用会导致内存使用量超过4 GB内存限制,并且扩展名崩溃。我有几个问题:

  • 有没有一种方法可以在不使用4 GB内存的情况下保存这150 MB的存储空间?
  • 是否有一种简单的方法可以将数据分块保存?鉴于JavaScript和JSON.stringify的异步特性,构建一种安全的方法似乎很棘手。

修改

根据@wOxxOm的要求,以下是一些用于生成伪造数据的代码:

chrome.storage

这似乎在function randomString() { return Math.floor(Math.random() * 0xFFFFFFFF).toString(16); } for (let i = 0; i < 70000; i++) { const item = {time: Date.now()}; for (let j = 0; j < 100; j++ ) { item[randomString()] = randomString(); } const recordName = "record-" + Date.now() + "-" + randomString(); const items = {}; items[recordName] = item; chrome.storage.local.set(items); } 中占用了约160 MB,但在内存中却约为2.7 GB。

0 个答案:

没有答案