我注意到只是循环浏览存储在Google云端硬盘上的文件会花费很多时间。
var startTime = Date.now();
var count = 0;
var files = DriveApp.getFiles();
while (files.hasNext()) { count++; var file=files.next();};
var endTime = Date.now();
Logger.log('Loop through ' + count + ' files takes ' + ((endTime-startTime)/1000) + ' seconds');
循环播放100个文件大约需要1秒钟。
将fileinfo存储在缓存中并在检索后循环访问它可以每秒处理大约20000个文件(在我的系统上)
var startTime = Date.now();
var fileIds = getFileIds(); // retrieve info cache (stored before)
var count = 0;
var numFiles = fileIds.length;
for (var i=0; i<numFiles; i++) { count++; var file = fileIds[i];};
var endTime = Date.now();
Logger.log('Loop through ' + count + ' files takes ' + ((endTime-startTime)/1000) + ' seconds');
上面的结果没什么特别之处,但它会让你想到一旦你将fileinfo存储在缓存中就可以加速某些动作。
在我的情况下,我注意到指定了几个searchcriteria并执行搜索
var files = DriveApp.searchFiles(criteria);
可能需要花费大量时间(超过20秒)处理结果 所以我想知道是否有办法加速搜索文件。
有没有人有想法如何加速和/或避免以第一次测试中描述的方式循环遍历所有文件?
答案 0 :(得分:0)
无法加快速度。您所做的比较并不十分相关,因为您第二次没有进行任何驱动器api呼叫
第二个调用只是测量没有api调用运行正确循环所需的时间
第一次,所有的时间都消耗了next
,它对驱动器api进行了一次圆形抓握
如果您的数据不经常更改,您可以使用缓存来避免再次进行相同的搜索。确保处理陈旧的结果等。