如何使用GAS加速搜索DriveApp文件

时间:2014-07-14 10:37:58

标签: google-apps-script google-drive-api

我注意到只是循环浏览存储在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秒)处理结果 所以我想知道是否有办法加速搜索文件。

有没有人有想法如何加速和/或避免以第一次测试中描述的方式循环遍历所有文件?

1 个答案:

答案 0 :(得分:0)

无法加快速度。您所做的比较并不十分相关,因为您第二次没有进行任何驱动器api呼叫 第二个调用只是测量没有api调用运行正确循环所需的时间 第一次,所有的时间都消耗了next,它对驱动器api进行了一次圆形抓握 如果您的数据不经常更改,您可以使用缓存来避免再次进行相同的搜索。确保处理陈旧的结果等。