【问题标题】:What is the most efficient way to use a large text file in a userscript?在用户脚本中使用大型文本文件的最有效方法是什么?
【发布时间】:2018-06-08 16:52:35
【问题描述】:

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

key1:val1
key2:val2
...

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

我想创建一个简单的 JavaScript 对象,将这些 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 了解的不够多,有没有其他更高效的方法呢?

【问题讨论】:

    标签: javascript userscripts


    【解决方案1】:

    如果你想要存储变量,你可以使用 localStorage

    if (!localStorage.firstLoad)
       localStorage.firstLoad = new Date();
    
    console.log(localStorage.firstLoad); // You will get the same date
    

    只读的 localStorage 属性允许您访问文档来源的 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>

    【讨论】:

      猜你喜欢
      • 2011-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-12
      • 2020-10-12
      • 1970-01-01
      相关资源
      最近更新 更多