通过指定要获取的对象属性,最小化用于chrome存储的流量

时间:2014-05-29 07:12:51

标签: google-chrome-extension google-chrome-storage

在我的扩展程序中,我按以下格式设置了某些设置为chrome.storage.local的域:

{
  domainSettings: {
    google.com.au: {
      setting: "someSetting",
      anotherSetting: "somethingElse"
    },
    stackoverflow.com: {
      setting: "someOtherSetting"
      anotherSetting: "somethingElseAswell"
    }
  }
  otherSettings: {
    ...
  }
}

不是使用chrome.storage.local.get("domainSettings", function(response){})来获取每个域的设置,而只是获得我需要的设置,我怎样才能获得google.com.au的设置。

当我需要的只是一个时,似乎没有必要获得数百或数千倍的信息。

干杯。

2 个答案:

答案 0 :(得分:1)

最简单的改变是使用更扁平的数据结构。

{
  "domainSettings:google.com.au": {
    setting: "someSetting",
    anotherSetting: "somethingElse"
  },
  "domainSettings:stackoverflow.com": {
    setting: "someOtherSetting"
    anotherSetting: "somethingElseAswell"
  },
  ...
}

答案 1 :(得分:0)

您可以随时使用正确的数据库,因为IndexedDB会向Chrome扩展程序公开。

或者,您可以放弃" domainSettings"从层次结构中,只使用主机名作为键。这完全没有错:

function set(hostname, options, callback){
  var data = {};
  data[hostname] = options;
  // Should be no need for deep copy, as chrome.storage will serialize
  chrome.storage.local.set(data, callback);
}

function get(hostname, callback){
  chrome.storage.local.get(hostname, function(result){
    callback(result[hostname]);
  });
}