如何在Chrome扩展程序中缓存数据?

13
我正在写一个Chrome扩展程序,用于我工作的图书馆。每次打开该扩展程序时,它会从图书馆的API中获取最新的图书标题。
随着越来越多的人使用该扩展程序,它对发送API数据的图书馆服务器造成了巨大的负载。
在Chrome扩展程序中缓存数据的方法是什么?
例如,我想在第一次打开Chrome扩展程序时获取数据,然后保存它(不确定保存在哪里?),只有在过去1小时后才请求API并再次保存数据。
有人能推荐一种在Chrome扩展程序中实现此功能的方法吗?
1个回答

15

要使用本地存储,请使用chrome.storage.local,它有一个非常简单的API和每个配置文件5 MB的存储空间。

所需权限是"storage",其将授予您访问chrome.storage.localchrome.storage.sync的权限。local在客户端上保存,每个配置文件为5MB。sync为100KB,在Google帐户中保存。同样的API。

我发现sync不太可靠,但您的需求似乎是local

用法:

function fetchLive(callback) {
  doSomething(function(data) {
    chrome.storage.local.set({cache: data, cacheTime: Date.now()}, function() {
      callback(data);
    });
  });
}

function fetch(callback) {
  chrome.storage.local.get(['cache', 'cacheTime'], function(items) {
    if (items.cache && items.cacheTime && items.cacheTime) {
      if (items.cacheTime > Date.now() - 3600*1000) {
        return callback(items.cache); // Serialization is auto, so nested objects are no problem
      }
    }

    fetchLive(callback);
  });
}

谢谢@Rudie。还有其他选择吗?我从未使用过本地存储,看起来相当复杂。每个请求的内容最多为100KB。 - bodacydo
我想我会使用 chrome.storage.local 来完成这个任务。我会尝试一下,然后告诉你它的工作原理。如果一切正常,请接受答案。谢谢。 - bodacydo
2
使用"unlimitedStorage"权限可以解除storage.local的配额限制。 - Xan
@Xan 文档中说:“此权限仅适用于Web SQL数据库和应用程序缓存”,因此目前还没有 storage.local 的权限? - Rudie
1
@Rudie 而且 chrome.storage 文档中提到了 QUOTA_BYTES 限制:“如果扩展程序具有无限存储权限,则此值将被忽略。” - Xan
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接