Вызов Firestore занимает (в среднем) 100/200 мс слишком долго для времени ожидания ответа диалогового потока - PullRequest
0 голосов
/ 15 января 2019

Я создаю бот диалогового потока, для выполнения бота я использую сервер узлов (в облачных функциях Google) для получения данных через функцию, возвращающую обещание

Я попытался добавить agent.setFollowupEvent('ExtendTimeOut');, потому что я прочитал здесь , что это увеличит тайм-аут (на 5 секунд) но я не знаю, где его поставить, и, похоже, он не работает.

В настоящее время я использую db.collection("details").where("keywords", "array-contains", keyword) для извлечения данных из Firestore

Структура БД:

users
  |__> userID
         |__> user properties
         |__> [Array of keywords (ex. fifa, gta, etc)]

Функция выполнения Dialogflow:

function GetUserDetails(agent) {
        var keyword = agent.parameters.any //keyword to search for

        return new Promise( function( resolve, reject ){
            db.collection("details").where("keywords", "array-contains", keyword)
            .get()
            .then(function(querySnapshot) {

                querySnapshot.forEach(function(doc) {
                    console.log("Contact data:", doc.data());
                    agent.add("these are the user details for " + doc.data()["name"]));
                    agent.add(doc.data()["username"]);
                    agent.add(doc.data()["useremail"]);

                });
                resolve()
            })
            .catch(function(error) {
                reject( error );
                console.log("Error getting documents: ", error);
            });

        });
}

let intentMap = new Map();
intentMap.set('GetUserDetails', GetUserDetails);;
agent.handleRequest(intentMap);

Кто-нибудь знает, как ускорить получение данных или продлить этот тайм-аут?

1 Ответ

0 голосов
/ 18 января 2019

Две вещи сразу приходят на ум, чтобы убедиться, что вы улучшаете производительность:

  • Убедитесь, что поле keywords проиндексировано. Операция array-contains стоит дорого, и это может помочь.
  • Рассмотрите возможность ограничения количества возвращаемых Если возвращается много данных, это резко снижает производительность (и приводит к очень хаотичному отклику).
...