我正在创建一个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内存限制,并且扩展名崩溃。我有几个问题:
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。