Облачная функция Google занимает слишком много времени

Я только начал использовать облачные функции Google. И ведут себя странно (или я что-то не так делаю). У меня есть следующая функция, которая пересчитывает средний рейтинг, когда пользователь оценивает какой-либо элемент

exports.onItemRated = functions.database.ref('/votes_history/{rankingId}/current/{itemId}').onWrite(event => {

const ranks = event.data.val();
const itemId = event.params.itemId;
const rankingId = event.params.rankingId;

let avg = 0;
let num = 0;
Object.keys(ranks).forEach( (rankerId) => { //sum up all ratings for the item
    avg += ranks[rankerId];
    num ++;
});

avg /= num;

return admin.database().ref(`averages/${rankingId}/${itemId}`).transaction( (curVal) => {
    return {avg, num};
});
}

Я тестировал его на очень небольшом количестве данных. Вроде 3 оценки. Так что, я считаю, ничего не должно занимать долгое время. Однако вот журналы: Журналы функций

Это правда, что моя «Платежная учетная запись не настроена. Внешняя сеть недоступна, а квоты сильно ограничены. Настройте платежную учетную запись, чтобы снять эти ограничения». Я хочу выяснить, есть ли проблема в моей функции или это просто ограничения. А также было бы здорово, если бы кто-нибудь объяснил, как работают эти ограничения.

===ОБНОВЛЕНИЕ===

Благодаря Cloud Functions for Firebase onWrite timeout удалось решить проблему тайм-аута путем переноса транзакции в собственное обещание. Похоже, это ошибка.

Однако даже сейчас время выполнения функции очень непредсказуемо. Не так безумно, как раньше, но все еще колеблется от 50 мс (идеально) до 2000+ мс. Я не понимаю, почему такая огромная разница. И по какой причине эта функция может выполняться 2000 мс?


person Daniil Andreyevich Baunov    schedule 01.04.2017    source источник
comment
Пожалуйста, имейте в виду, что облачные функции находятся в стадии общедоступной бета-версии, поэтому инженеры все еще решают некоторые проблемы. Обратите внимание, что в настоящее время нет никаких гарантий производительности или доступности. Должны быть гарантии, когда сервис выйдет из бета-версии.   -  person Doug Stevenson    schedule 01.04.2017
comment
То, что вы, вероятно, видите, является временем холодного запуска — когда функция выполняется, если она бездействовала или все существующие экземпляры функционального контейнера работают, необходимо запустить новый. Вот почему вы можете увидеть ~ 2-3 секунды вместо мс при некоторых вызовах. Когда ваша функция выполняется на регулярной основе, это будет происходить реже.   -  person Michael Bleigh    schedule 02.04.2017