编辑:我正在使用表扣。将代码更新为实际的GAS!
我已将GAS部署为网络应用。我们通过Slash命令从Slack发送POST请求,由于GAS无法处理异步代码,因此它需要在不到3000毫秒的时间内做出响应。
在第一个请求上,发送响应需要花费3000毫秒以上的时间,但在随后的请求上,大约需要1500毫秒。
doPost
函数如下所示。
var exports = exports || {};
var module = module || { exports: exports };
Logger = BetterLog.useSpreadsheet('spreadsheetId');
function doPost(request) {
var startExecutionDate = new Date();
var path = request.parameter.path;
Logger.log("Request received with path: " + path);
var response = Responses.Error;
var token = request.parameter.token;
if (path.startsWith('/slack')) {
Logger.log("Slack request");
var slackRouter = new SlackRouter();
response = slackRouter.post(request);
// ...
}
// ...
}
这是Slack路由器的代码。
var exports = exports || {};
var module = module || { exports: exports };
var SlackRouter = (function () {
function SlackRouter() {
}
SlackRouter.prototype.post = function (request) {
var path = request.parameter.path;
switch (path) {
case Routes.Team:
Logger.log("For team");
// ...
}
};
return SlackRouter;
}());
exports.SlackRouter = SlackRouter;
我有每个日志的时间戳。
第一次尝试
| Timestamp | Delta in ms | Log Message |
|--------------|-------------|---------------|
| 11:22:34:164 | 0 | Path: ... |
| 11:22:35:354 | 1190 | Slack request |
| 11:22:35:462 | 108 | For team |
第二次尝试
| Timestamp | Delta in ms | Log Message |
|--------------|-------------|---------------|
| 11:22:45:047 | 0 | Path: ... |
| 11:22:45:164 | 117 | Slack request |
| 11:22:45:350 | 186 | For team |
我已经有了一些想法,就像Web应用程序进入睡眠状态一样,但是由于我们从第一条日志消息中计算出增量,因此没有任何意义。
那么幕后发生了什么?您知道任何简单的解决方法吗?如果可能的话,我不想构建一个微服务来及时向Slack发送响应,然后再发送实际响应。
答案 0 :(得分:0)
最明显的问题是您在doPost()
方法中使用了ES6语法。
Google Apps脚本不支持ES6模板字符串语法,仅部分支持解构分配。所以这可能是您的问题。您的{{1}}可能无法返回值,因此Slack可能会重复请求直到超时。
答案 1 :(得分:0)
尝试删除BetterLog库。这可能会导致最初的首次延迟。 https://developers.google.com/apps-script/guides/libraries
警告:如果所有代码都包含在一个脚本项目中,那么使用库的脚本的运行速度将不如它快。尽管库可以使开发和维护更加方便,但是您应该在速度至关重要的项目中谨慎使用它们。由于这个问题,应该限制附件中的库使用。
答案 2 :(得分:0)
Apps Script服务器不会将编写或部署的每个脚本都加载到内存中,因此,有一段时间未运行的脚本需要首先从磁盘加载。在云提供商中,这通常称为“冷启动时间”。