我们正在使用Google Drive v3 API管理我们的网络应用程序中的文档。我们有一个简单的用例,用户点击一个按钮,后端需要将大约5-10个文件从source
复制到destination
文件夹。我在源文件夹中测试了6个文件,API花了大约7秒钟。我已经使用批处理来调用复制文件API。以下是相同的代码:
向队列添加请求:
for(Template template: templates) {
File file = new File();
file.setParents(Collections.singletonList(parentFileId));
file.setName(template.getName());
file.setWritersCanShare(false);
file.setViewersCanCopyContent(false);
Map<String, String> appProperties = new HashMap<>();
appProperties.put(TEMPLATE_CODE_PROP_NAME, template.getCode());
file.setAppProperties(appProperties);
driveService.files().copy(template.getFileId(), file)
.setFields("id, name, appProperties, webViewLink, iconLink, mimeType")
.queue(batch, callback);
}
成功执行批处理后处理响应:
JsonBatchCallback<File> callback = new JsonBatchCallback<File>() {
@Override
public void onSuccess(File file, HttpHeaders responseHeaders) throws IOException {
log.info("Copied file successfully - " + file.getName() + " " + file.getId());
}
@Override
public void onFailure(GoogleJsonError e, HttpHeaders responseHeaders) throws IOException {
log.severe("Failed to copy file " + e.getCode() + " " + e.getMessage());
throw new Exception();
}
};
我遵循了Google推荐的最佳做法:
API需要7秒才能完成这个简单的任务。从用户体验角度来看,这是一个非常糟糕的表现。 我想知道这是预期的延迟还是我在这里做错了什么?
答案 0 :(得分:2)
您的代码很好。有时Google驱动器API确实很慢。在这种情况下,唯一的解决方案是如果花费的时间超过阈值时间,则向API发出新请求。在大多数情况下,新请求将快速返回数据。
关于堆栈溢出的一些答案都说不是驱动器API,而是开发人员的代码使代码变慢,从我个人的经验来看这是不正确的。 (我检查了Chrome开发工具,API的响应时间通常在20到30秒之间。)