Firebase / Cloud功能非常慢

时间:2018-08-07 07:28:44

标签: javascript firebase google-cloud-firestore google-cloud-functions

我有一个执行以下操作的Firebase Cloud功能:

const firestore = require('firebase-admin')
const functions = require('firebase-functions')
const regex = require('../../utils/regex')

exports = module.exports = functions.https.onCall((data, context) => {
  if (!context.auth) {
    throw new functions.https.HttpsError('failed-precondition', 'The function must be called while authenticated.')
  }

  if (!data['displayName']) {
    throw new functions.https.HttpsError('failed-precondition', 'An display name must be provided.')
  }

  if (!regex.noSpecialCharactersExceptSpace.test(data['displayName'])) {
    throw new functions.https.HttpsError('input-validation-failed', 'Your display name cannot have special characters in it.')
  }

  return firestore.firestore().collection('profiles').doc(context.auth.uid)
    .update({
      displayName: data['displayName']
    })
    .then(() => {
      console.info('Successful public profile update user='+ context.auth.uid)
      return { text: 'Your profile has successfully been updated' };
    })
    .catch((error) => {
      console.error('Error updating public profile user=' + context.auth.uid + ' error=' + error)
      throw new functions.https.HttpsError('failed-precondition', 'An error happened, our team will look into it.')
    })
})

从我的前端,当我调用此函数时,它最多可能需要20到30秒才能完成并返回状态代码。这种延迟确实会破坏用户体验。

改善响应时间的最佳方法是什么?

测试

  1. 从用户界面直接调用Firestore可以快速解决问题。因此,问题似乎不太可能是我们这边的DNS。

  2. 从UI到Cloud Function的其他API调用(例如“邀请朋友”)可以快速解决,并且不受此错误的影响。

  3. 调用其他Cloud Function(不会返回Promise,但执行带有邮戳的电子邮件之类的操作)不受此故障的影响,并且也很快得到了解决。因此,问题似乎不在于Firebase项目(us-central1)的位置。尽管尚未测试更改位置。

  4. 仅此功能发生故障。一个复制并粘贴到上面。

  5. 受影响的功能与我们的其他功能之间的唯一区别是,发生故障的功能会返回Firestore操作的承诺。

0 个答案:

没有答案