【问题标题】:Firebase arrayRemove takes very long time in modular versionFirebase arrayRemove 在模块化版本中需要很长时间
【发布时间】:2022-01-07 11:51:05
【问题描述】:

我正在重构我的 firebase 代码以支持模块化 firebase 版本。

重构“arrayRemove”函数后,我注意到它开始需要很长时间才能执行。大约1分钟。在 v8 中,这大约是 1 秒

这是我的代码:

  const userRef = doc(db, 'users', userId)
  try {
    await updateDoc(userRef, {
      items: arrayRemove(itemId),
    })

    console.log('REMOVED')
  } catch (error) {
    console.log(error)
  }

执行此代码大约需要一分钟。对于旧版本,在相同环境中使用相同数据执行相同操作大约需要一秒钟。其余功能运行迅速。

Firebase 版本:9.6.1

任何想法为什么需要这么长时间以及如何使其更快?

【问题讨论】:

  • 在 v8 和 v9 之间执行数组删除的方式没有根本变化,因为新 SDK 的 Firestore 有线协议没有更改。您能否在我们都可以测试的地方(例如 jsbin 或 stackblitz)设置性能差异的最小再现?
  • 嗨@MAZ,有更新吗?
  • @FaridShumbar 感谢您愿意帮助解决此问题。我想重现此问题,但这需要开始一个新项目并在此处共享我的凭据。这可能需要一些时间......我也意识到,这个数组最初是一个错误的决定。我将使用集合代替
  • @FaridShumbar 我重新考虑了我的决定,发现使用数组是正确的。我找到了一种解决方法来删除项目而不使用删除功能。

标签: javascript firebase google-cloud-firestore


【解决方案1】:

看完文章“Best Practices: Arrays in Firebase

我发现了这种做法:

要删除键,我们保存整个数组而不是使用 .remove()

所以...我删除了代码中的项目,然后更新了数组,不到一秒钟!

  // removing item I need to remove at my local array
  const updArr = arr(
    (item) => item !== itemId
  )

  const userRef = doc(db, 'collection', 'id')

  // updating array
  await updateDoc(userRef, {
    gifts: updArr,
  })

// p.s. 显然,arrayRemove 函数存在一些错误,但实际上我们不必使用该函数?

【讨论】:

    猜你喜欢
    • 2017-11-13
    • 1970-01-01
    • 2017-11-25
    • 2012-08-03
    • 2017-10-06
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    • 2020-08-26
    相关资源
    最近更新 更多