bra*_*eye 2 javascript google-sheets google-apps-script
我对谷歌缓存脚本的putAll() 方法有问题。该方法似乎有效,但仅适用于前 (~100) 对
在我的脚本中,我必须缓存大量行(~2500 * 3),每一行都在不同的键中,我发现缓存服务出现故障。为了找出问题,我写了一个简单的代码
function myFunction() {
var cache = CacheService.getScriptCache();
var toCache = {};
for (var i = 0; i < 2000; i++){
toCache["key"+i] = "value"+i;
}
cache.putAll(toCache);
var tmp;
for (var i = 0; i < 2000; i+=10){
var a = cache.get("key"+i);
if (a == null) { tmp = "key"+i; break; }
}
tmp = tmp;
}
Run Code Online (Sandbox Code Playgroud)
和过去一样,缓存服务似乎是不可预测的,并且在处理过程中不处理错误。多次调用放置缓存较慢,并且不能确保限制将来不会改变,因为它甚至没有在文档中提到......
谢谢
这个答案怎么样?我认为可能有几种方法。因此,请将此视为其中之一。
在您的情况下,wheni是 100,则a返回null。至此,for循环结束。使用如下脚本时,发现CacheService中有100多个属性。
var cache = CacheService.getScriptCache();
var toCache = {};
var keys = [];
for (var i = 0; i < 2000; i++) {
var key = "key" + i;
keys.push(key);
toCache[key] = "value" + i;
}
cache.putAll(toCache);
var r = cache.getAll(keys);
Logger.log(keys.length) // 2000
Logger.log(Object.keys(r).length) // 900
Run Code Online (Sandbox Code Playgroud)
但是也发现虽然推送了2000个属性,但是只检索到了900个属性。而且我找不到丢失财产的规律。从这个结果,我认为可能有最大数量的属性可以推送。
作为一个实验,我调查了随着推送属性数量的增加,检索到的属性数量。每个属性都被一次性推送。下图是结果。
从这个图中可以看出,对于上面的脚本,900个属性是一次可以推送的最大属性数。这不取决于小于 100 KB 的值的大小。还可以获得以下几点。
这些结果与CacheService.getScriptCache()、CacheService.getUserCache()和相同CacheService.getDocumentCache()。但是CacheService.getScriptCache(),CacheService.getUserCache()和 的每种方法CacheService.getDocumentCache()都可以用作单独的存储。所以当使用 3 种方法时,可以使用 3,000 个属性。
CacheService.getScriptCache(),CacheService.getUserCache()和CacheService.getDocumentCache()独立。
CacheService.getScriptCache()、CacheService.getUserCache()和时,CacheService.getDocumentCache()可以使用 3,000 个属性。从上面的结果来看,当你推送“~2500 * 3”的属性时,下面的解决方法如何?
CacheService.getScriptCache(),CacheService.getUserCache()和 的方法CacheService.getDocumentCache()。
我认为“~2500 * 3”的属性可以通过这些组合推送到CacheService。
CacheService.getDocumentCache(),请使用容器绑定脚本。如果上述结果已被报告和/或这不是您想要的,我很抱歉。
| 归档时间: |
|
| 查看次数: |
348 次 |
| 最近记录: |