Почему первый ответ занимает больше времени в веб-приложении GAS? - PullRequest
0 голосов
/ 10 июля 2019

Редактировать: я использую застежку.Обновил код до фактического GAS!

У меня есть GAS, развернутый как веб-приложение.Мы отправляем POST-запросы из Slack с помощью команды slash, и ему требуется ответ менее чем за 3000 мс, поскольку GAS не может обработать асинхронный код.

При первом запросе для отправки ответа требуется более 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 Router.

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      |

У меня уже было несколько идей, когда веб-приложение переходит ксостояние сна, но поскольку мы вычисляем дельту из первого сообщения журнала, это не имеет смысла.

Так что же происходит за кулисами?Вам известны какие-нибудь простые обходные пути?Если возможно, я не хочу создавать микросервис, чтобы вовремя отправить ответ Slack, а затем отправить фактический ответ.

Ответы [ 2 ]

0 голосов
/ 15 июля 2019

Попробуйте удалить библиотеку BetterLog. Это может быть причиной первоначальной задержки в первый раз. https://developers.google.com/apps-script/guides/libraries

Предупреждение. Сценарий, использующий библиотеку, не запускается так быстро, как если бы весь код содержался в одном проекте сценария. Хотя библиотеки могут сделать разработку и сопровождение более удобными, вы должны экономно использовать их в проектах, где скорость критична. Из-за этой проблемы использование библиотек должно быть ограничено в надстройках.

0 голосов
/ 10 июля 2019

Наиболее очевидной проблемой является использование синтаксиса ES6 в методе doPost().

Google Apps Script не поддерживает синтаксис строки шаблона ES6 и только частично поддерживает назначения деструктурирования. Так что это может быть вашей проблемой. Ваш doPost(), вероятно, не сможет вернуть значение в результате, поэтому Slack, вероятно, будет повторять запрос до истечения времени ожидания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...