如何在Chrome Storage API中有效地将项目添加到阵列?

IQA*_*eas 6 javascript arrays local-storage google-chrome-extension

据我所知,如果您想在Chrome Storage 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");
        });
    });
}
Run Code Online (Sandbox Code Playgroud)

这段代码困扰我; 每次将一个项目推到最后加载然后保存相同的数组是非常低效的(特别是如果你的history数组开始获得数千个条目).

有更有效的方法吗?我假设我不是第一个想要推送到阵列的人,所以有没有推荐的实现方法?

Paw*_*tyć 0

我认为 chrome.storage.sync API 并不适合您的需求。基本上,这个 API 非常适合记住用户偏好或简单而简短的数据。同步 API 的使用限制如下: - 存储中保存的所有数据为 102.4 KB - 每个项目 8 KB 数据 - 每小时 1,800 次写入

因此,如果您计划使用此 API 来存储一些历史数据,则应用程序可能会很快超出限制。

我假设您正在开发扩展,而不是应用程序。在应用程序中,您可以访问 chrome.syncFileSystem API,该 API 可用于将可同步数据保存在文件中。

回答你的问题没有一种方法可以优化你的功能。您可以尝试定期存储数据 - 例如每 30 秒左右一次。您只需要记住在用户关闭应用程序后保存数据即可。

您还可以将此值作为变量存储在内存中,并在用户离开屏幕或关闭应用程序时保存它,但这很危险,因为应用程序可能会在异步任务完成之前关闭。

无论如何,我认为这个 API 并不是适合您的应用程序的最佳解决方案。