Google apps script 批处理和API-性能

Google apps script 批处理和API-性能,google-apps-script,google-drive-api,Google Apps Script,Google Drive Api,我正在用谷歌应用程序脚本打电话 我有一个奇怪的问题。对于create,批处理速度非常快(20条记录需要4秒,我还没有尝试更多) 然而,复制文件的速度非常慢。如果有超过20条记录,并且这20条记录大约需要58秒,那么它将获得批处理api超时。因此,每个文件3秒,这与我使用基本for loop和driveapp.copy调用获得的速度相同(工作了很多小时之后)。更糟糕的是,事实上,因为至少如果我使用for循环,我可以运行30分钟而不是60秒 有什么办法可以加快速度吗?有什么我没记住的吗 functi

我正在用谷歌应用程序脚本打电话

我有一个奇怪的问题。对于create,批处理速度非常快(20条记录需要4秒,我还没有尝试更多)

然而,复制文件的速度非常慢。如果有超过20条记录,并且这20条记录大约需要58秒,那么它将获得批处理api超时。因此,每个文件3秒,这与我使用基本for loop和driveapp.copy调用获得的速度相同(工作了很多小时之后)。更糟糕的是,事实上,因为至少如果我使用for循环,我可以运行30分钟而不是60秒

有什么办法可以加快速度吗?有什么我没记住的吗

function COPYBATCH(dictionary) {
  var body = [];
  for (var key in dictionary)

    {
      var object = {
      method: "POST",
      endpoint: "https://www.googleapis.com/drive/v3/files/"+dictionary[key].source+"/copy",
      requestBody: {
        "parents": [
           dictionary[key].parent,
        ],

         "name": key 
      }     

      };
      body.push(object);
    }
  Logger.log(body.length);

  var boundary = "xxxxxxxxxx";
  var contentId = 0;
  var data = "--" + boundary + "\r\n";
  for (var i in body) {
        data += "Content-Type: application/http\r\n";
        data += "Content-ID: " + ++contentId + "\r\n\r\n";
        data += body[i].method + " " + body[i].endpoint + "\r\n";
        data += body[i].requestBody ? "Content-Type: application/json; charset=utf-8\r\n\r\n" : "\r\n";
        data += body[i].requestBody ? JSON.stringify(body[i].requestBody) + "\r\n" : "";
        data += "--" + boundary + "\r\n";
  }
  var payload = Utilities.newBlob(data).getBytes();
  var options = {
    method: "post",
    contentType: "multipart/mixed; boundary=" + boundary,
    payload: payload,
    headers: {'Authorization': 'Bearer ' + ScriptApp.getOAuthToken()},
    muteHttpExceptions: true,
  };
  var res = UrlFetchApp.fetch("https://www.googleapis.com/batch/drive/v3", options).getContentText();
  Logger.log(res);
  return parseResponseArray(res,dictionary);

}
我尝试过的事情:我最初让批处理从/batch/获取,但我在gmail api的最佳实践页面上发现它应该更具体。响应只包括fileid、名称和mimetype,因此限制返回的字段似乎不是很有用

实际上将其限制为
”https://www.googleapis.com/drive/v3/files/“+字典[key]。源+”/copy?字段=id,名称“,

似乎每分钟给了我更多的记录,但不是很多,我仍然无法复制30个文件而不破坏api超时。

在这种情况下,您只上载20个文件,批量上载与循环上的多个单个文件上载相比并没有显着的优势。然而,这是可能的最佳实践,除了优化代码以便更快地解释之外,您没有其他方法可以加快它的速度。您可以阅读,以避免达到其限制,并收集更多详细信息。

在这种情况下,您只上载20个文件,批量上载与循环上的多个单个文件上载相比并没有明显的优势。然而,这是可能的最佳实践,除了优化代码以便更快地解释之外,您没有其他方法可以加快它的速度。您可以阅读以避免达到其极限,并收集更详细的信息。

在我的环境中,我从未体验过。因此,为了正确了解您的情况,我可以问一下30个文件的mimeType和文件大小吗?因为我认为如果文件大,可能会发生这样的错误。但我认为这是需要测试的。它是一个混合了gsheet、pdf和gdocs的系统,还有几个大拉链。你认为尺寸会有所不同吗?谢谢你的回复。我以为是的。但我从未测试过这个。因此,我不得不为我糟糕的经验道歉。使用批处理的唯一原因是在多次调用API时为您节省HTTP调用。出于您所述的所有原因,我从来都不是批处理的粉丝。批处理不会更快,批处理不会提高您的配额使用率,批处理可能会导致运行到fast配额错误,因为它是同一个用户执行每个批处理请求,如果服务器只快一次,那么您将收到洪水保护错误。批处理请求中的PDF和ZIP是否总共超过50MB?在我的环境中,我从未经历过。因此,为了正确了解您的情况,我可以问一下30个文件的mimeType和文件大小吗?因为我认为如果文件大,可能会发生这样的错误。但我认为这是需要测试的。它是一个混合了gsheet、pdf和gdocs的系统,还有几个大拉链。你认为尺寸会有所不同吗?谢谢你的回复。我以为是的。但我从未测试过这个。因此,我不得不为我糟糕的经验道歉。使用批处理的唯一原因是在多次调用API时为您节省HTTP调用。出于您所述的所有原因,我从来都不是批处理的粉丝。批处理不会更快,批处理不会提高您的配额使用率,批处理可能会导致运行到fast配额错误,因为它是同一个用户执行每个批处理请求,如果服务器只快一次,那么您将收到洪水保护错误。批处理请求中的PDF和ZIP是否总共超过50MB?当我处理超过20个文件时,它会在60秒后发回超时错误。。。。有没有办法防止这种情况发生?在这种情况下,我强烈建议将文件拆分为单个文件上传。如果您真的想使用批处理文件,解决方案是将批处理拆分为较小的批处理。当我处理的文件超过20个时,它会在60秒后发回超时错误。。。。有没有办法防止这种情况发生?在这种情况下,我强烈建议将文件拆分为单个文件上传。如果您确实想使用批处理文件,解决方案是将批处理拆分为较小的批处理。