在用户脚本中使用大文本文件的最有效方法是什么?

时间:2018-06-07 10:49:15

标签: javascript userscripts

我有一个包含15k对密钥的文本文件:值条目(字符串,平均长度25chars),根据键值按字母顺序存储。像这样:

key1:val1
key2:val2
...

我需要存储它并从用户脚本中访问它。最有效的方法是什么?

我想过创建一个简单的JavaScript对象,在usercript中存储那些key:value条目。这是我目前的代码:

var string = `the_text_file_contents`.split("\n"), obj = {};

string.forEach(function(pair){
    pair = pair.split(":");
    obj[pair[0]] = pair[1];
});

虽然访问速度很快(简单object[key]),但对象会占用大量内存。我可以创建一个数组,我想这将需要更少的内存,但访问速度较慢(使用二进制搜索优化)。

我不太了解JS,那么还有另一种更有效的方法吗?

1 个答案:

答案 0 :(得分:1)

如果您想要商店变量,可以使用 localStorage

if (!localStorage.firstLoad)
   localStorage.firstLoad = new Date();

console.log(localStorage.firstLoad); // You will get the same date
  

只读的localStorage属性允许您访问Document的源的Storage对象;存储的数据将保存在浏览器会话中。 localStorage类似于sessionStorage,但是当localStorage中存储的数据没有到期时间时,存储在sessionStorage中的数据会在页面会话结束时清除 - 也就是说,当页面关闭时。   https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage

你必须只解析一次dico,并且复制/粘贴对象构造函数会更有效。

const obj = {
  "ciel": "bue",
  "night": "dark",
  "pizza": "like"
};
console.log(obj);

// STEP 1 : PARSE
const string = `ciel:bue\nnight:dark\npizza:like`.split("\n"),
  obj = {};

string.forEach(function(pair) {
  pair = pair.split(":");
  obj[pair[0]] = pair[1];
});

console.log(obj);

// STEP 2 : SAVE OBJ TO JSON & COPY/PAST ON YOUR FILE

document.getElementById("output2").value = "const obj = " + JSON.stringify(obj, "\n", 2) + ";";
<textarea id="output2" rows="5" cols="20"></textarea>