如何有效地将项目添加到 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 中的数组?的主要内容,如果未能解决你的问题,请参考以下文章

GitHub API:无法可靠地将文件添加到存储库

如何有效地将大数据从数据中心移动到 Azure Blob 存储,以便以后通过 HDInsight 进行处理?

如何有效地将节点添加到段树中以进行最小范围查询?

如何有效地将大文件加载到 IndexedDB 存储中?我的应用程序在超过 100,000 行时崩溃

如何使用python有效地将国家信息添加到包含mongoDB中坐标的文档?

如何有效地将稀疏矩阵列添加到另一个稀疏矩阵中的每一列?