如何有效地将项目添加到 Chrome 存储 API 中的数组?
Posted
技术标签:
【中文标题】如何有效地将项目添加到 Chrome 存储 API 中的数组?【英文标题】:How do I efficiently add items to an array in the Chrome Storage API? 【发布时间】:2015-05-25 08:23:56 【问题描述】:据我了解,如果您想在 Chrome 存储 API 中存储一个数组,并希望不断向其中添加项目,您需要这样的东西:
function addToHistory(url)
chrome.storage.sync.get('history', function(obj)
var history = obj.hasOwnProperty('history') ? obj.history : [];
history.push(url);
chrome.storage.sync.set('history': history, function()
if (chrome.runtime.lastError)
console.log(chrome.runtime.lastError);
else
console.log("History saved successfully");
);
);
这段代码让我很困扰; 每次将单个项目推到末尾时加载然后保存相同的数组是非常低效的(尤其是当您的 history
数组开始获得数千个条目时)。
有没有更有效的方法来做到这一点?我假设我不是第一个想要推送到数组的人,那么是否已经有推荐的方法来实现这一点?
【问题讨论】:
【参考方案1】:我不认为 chrome.storage.sync API 非常适合您的需求。基本上,这个 API 非常适合记住用户偏好或简单而简短的数据。 Sync API 有使用限制,例如: - 102.4 KB 用于存储在存储中的所有数据 - 每个项目 8 KB 的数据 - 每小时 1,800 次写入
因此,如果您打算使用此 API 来存储一些历史数据,则该应用可能会很快超出限制。
我假设您正在开发扩展程序,而不是应用程序。在应用程序中,您可以访问 chrome.syncFileSystem API,该 API 可用于将可同步数据保存在文件中。
回答您的问题,没有一种方法可以优化您的功能。您可以尝试定期存储数据 - 例如每 30 秒左右。您只需要记住在用户关闭应用后保存数据。
您也可以将此值作为变量存储在内存中,并在用户离开屏幕或关闭应用程序时将其保存,但这很危险,因为应用程序可能会在异步任务完成之前关闭。
无论如何,我认为这个 API 不是您应用的最佳解决方案。
【讨论】:
以上是关于如何有效地将项目添加到 Chrome 存储 API 中的数组?的主要内容,如果未能解决你的问题,请参考以下文章
如何有效地将大数据从数据中心移动到 Azure Blob 存储,以便以后通过 HDInsight 进行处理?
如何有效地将大文件加载到 IndexedDB 存储中?我的应用程序在超过 100,000 行时崩溃