Я создаю расширение Chrome, которое хранит много данных в chrome.storage.local
.Под «много» я подразумеваю, что когда я запускаю что-то вроде этого:
chrome.storage.local.getBytesInUse(i => console.log(i))
... я печатаю 150873495
, указывая, что я храню около 150 МБ.Я хотел бы иметь возможность хранить больше, чем это.Я знаю, что это большое количество данных для расширения Chrome, но оно будет работать на моем собственном компьютере.
Ранее я публиковал Как я могу получить много данных в chrome.storage.local? , и эта проблема была решена путем исправления ошибки в Chrome.Теперь у меня есть другая проблема.
Я хотел бы перенести все данные в chrome.storage.local
в какой-то текстовый файл (например, JSON).Однако, когда я запускаю что-то столь простое, как это:
chrome.storage.local.get(
null,
result => {
console.log("Records retrieved");
}
);
... использование памяти моим расширением (находится в диспетчере задач Chrome) возрастает до 2,4 ГБ, что на порядок большечем 150 МБ, что данные занимают на диске в chrome.storage.local
.Допустим, я хочу сохранить эти данные в файл, используя метод, описанный в Расширение Chrome: локальное хранилище, как экспортировать .Мне нужно позвонить JSON.stringify
:
chrome.storage.local.get(
null,
result => {
console.log("Records retrieved");
const json = JSON.stringify(result);
console.log("JSON string length: " + json.length);
}
);
Он никогда не доходит до комментария "Длина строки JSON", потому что вызов JSON.stringify
приводит к тому, что использование памяти выходит за пределы 4 ГБ памяти, и расширение падает,У меня есть пара вопросов:
- Есть ли способ сохранить эти 150 МБ памяти без использования 4 ГБ памяти?
- Есть ли простой способ сохранить эти данные вглыбы?Учитывая асинхронную природу JavaScript и
chrome.storage
, кажется, что создание безопасного способа сделать это было бы сложно.
Edit
По запросу @ wOxxOm , вот некоторый код, используемый для генерации поддельных данных:
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 МБ в chrome.storage.local
, но около 2,7 ГБ в памяти.