【问题标题】:Firebase storage extremely slow fetchingFirebase 存储的获取速度极慢
【发布时间】:2021-10-23 01:15:35
【问题描述】:

我在 React-Native 应用 (expo) 上使用 Firebase,但遇到了一些性能问题(主要是 Firebase 存储)。

例如,每当我为帖子获取数据并想要显示照片时,如果照片(640x480)和视频(480p)上传到应用程序上,我必须等待大约 1.5-2 秒和 2.5-3.5 秒firebase 存储。

但是,当我将 firestore 字段中的链接更改为外部链接(相同的图像 - 相同的分辨率,但托管在另一台主机上,而不是 firebase 存储)时,图像会立即加载。所以,据我所见,firestore 运行良好,但 firebase 存储链接加载速度很慢。

有什么方法可以提高它的性能吗?我不认为 640x480 的图片需要 1.5-2 秒就可以了

【问题讨论】:

  • 不是CDN,是不是你的bucket位置离你太远了?
  • 没错,这个位置可能在一千英里之外。但是如何解决可扩展性问题呢?我的意思是,我不希望来自世界另一端的人等待 5 秒才能拍照
  • 将应用托管在 Firebase 托管上会解决这个问题吗?我看到 Firebase 托管将其分发到全球 CDN

标签: reactjs firebase react-native google-cloud-firestore firebase-storage


【解决方案1】:

我认为您正在尝试一次解析整个视频,这会导致下载整个内容然后加载。尝试使用编码技术将视频分割成小块(就像 youtube 那样)并流式传输视频。 https://cloud.google.com/solutions/media-entertainment这可能对你有帮助

【讨论】:

  • 谢谢!会调查的。但是照片呢?一张 640x480 的照片也需要 1.5-2 秒,这是不正常的
【解决方案2】:

Firebase 存储不是 CDN,因此如果您的存储分区距离您太远,可能需要一段时间。我不确定您的 640x480 图像的大小,但 1-2 秒听起来还不错。我尝试先从本地计算机下载219,457 bytes 的图像,然后从VM 实例(下载速度超过4000 Mbps)下载。虚拟机只需要0.5 seconds 就可以下载它(存储桶所在的同一区域),但我的计算机却在2-4 seconds 之间的任何地方。

将应用托管在 firebase 托管上会解决这个问题吗?我看到 Firebase 托管将其分发到全球 CDN

Firebase 存储和托管是 2 个独立的服务。托管服务于网站资源,例如 HTML、JS 或您通过 CDN 使用 firebase deploy --only hosting 命令部署的任何静态文件。

最好的选择是将 CDN 与 Firebase 存储结合使用。你可以setup Google Cloud CDN with Storage bucket。我只是比较了使用和不使用 CDN 的 Firebase 存储的下载时间,区别如下:

没有 CDN:

使用 CDN:


此外,即使您已从 Firebase 存储中删除图像,您的 CDN 提供商也可能会继续提供缓存版本,因此请确保提供商有某种 API 可以从缓存中清除特定文件。

编辑:

一旦图像缓存在边缘,任何人都可以在没有?token= 参数的情况下访问它,这违背了拥有它的目的和安全规则。即使安全规则只是阻止随机用户获取下载 URL,并且如果授权用户与其他人共享图像,则不会访问图像,但在某些情况下这可能并不理想。

一种解决方法是使用这些标记 (UUID) 作为图像名称(例如 img_9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d.png),但除非您重新上传图像(以使用新标记重命名图像),否则您无法撤消这些标记。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    • 2017-10-24
    • 1970-01-01
    • 2015-07-22
    • 1970-01-01
    • 2011-03-30
    • 1970-01-01
    相关资源
    最近更新 更多