Firebase 存储获取速度极慢
Firebase storage extremely slow fetching
我在 React-Native 应用程序 (expo) 上使用 Firebase,我遇到了一些性能问题(主要是 Firebase 存储)。
例如,每当我获取 post 的数据并想要显示照片时,我必须等待大约 1.5-2 秒的照片(640x480)和 2.5-3.5 秒的视频(480p),如果它们上传到应用程序 firebase 存储。
但是,当我将 firestore 字段中的 link 更改为外部 link(相同图像 - 相同分辨率,但托管在另一台主机上,而不是 firebase 存储)时,图像会立即加载。因此,据我所知,firestore 运行良好,但 firebase 存储 link 加载速度非常慢。
有什么方法可以提高它的性能吗?我认为 640x480 图片的 1.5-2 秒不合适
我认为您正在尝试一次解析整个视频,这会导致下载整个内容然后加载。尝试使用编码技术将您的视频分成小块(就像 youtube 那样)并流式传输视频。
https://cloud.google.com/solutions/media-entertainment这可能对你有帮助
Firebase 存储不是 CDN,因此如果您的存储桶距离您太远,可能需要一段时间。我不确定您的 640x480
图片的大小,但 1-2 秒听起来还不错。我尝试先从本地计算机下载 219,457 bytes
的图像,然后从 VM 实例(其下载速度超过 4000 Mbps
)下载图像。 VM 只用了 0.5 seconds
就下载了它(存储桶所在的同一区域),但我的计算机却在 2-4 seconds
.
之间的任何位置
Will hosting the app on firebase hosting solve this issue? I see firebase hosting distributes it to a global cdn
Firebase 存储和托管是两项独立的服务。托管服务网站资源,例如 HTML、JS 或您使用 firebase deploy --only hosting
命令通过 CDN 部署的任何静态文件。
最好的选择是将 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
),但您不能撤销这些标记,除非您重新上传图像(使用新标记重命名图像)。
我在 React-Native 应用程序 (expo) 上使用 Firebase,我遇到了一些性能问题(主要是 Firebase 存储)。
例如,每当我获取 post 的数据并想要显示照片时,我必须等待大约 1.5-2 秒的照片(640x480)和 2.5-3.5 秒的视频(480p),如果它们上传到应用程序 firebase 存储。
但是,当我将 firestore 字段中的 link 更改为外部 link(相同图像 - 相同分辨率,但托管在另一台主机上,而不是 firebase 存储)时,图像会立即加载。因此,据我所知,firestore 运行良好,但 firebase 存储 link 加载速度非常慢。
有什么方法可以提高它的性能吗?我认为 640x480 图片的 1.5-2 秒不合适
我认为您正在尝试一次解析整个视频,这会导致下载整个内容然后加载。尝试使用编码技术将您的视频分成小块(就像 youtube 那样)并流式传输视频。 https://cloud.google.com/solutions/media-entertainment这可能对你有帮助
Firebase 存储不是 CDN,因此如果您的存储桶距离您太远,可能需要一段时间。我不确定您的 640x480
图片的大小,但 1-2 秒听起来还不错。我尝试先从本地计算机下载 219,457 bytes
的图像,然后从 VM 实例(其下载速度超过 4000 Mbps
)下载图像。 VM 只用了 0.5 seconds
就下载了它(存储桶所在的同一区域),但我的计算机却在 2-4 seconds
.
Will hosting the app on firebase hosting solve this issue? I see firebase hosting distributes it to a global cdn
Firebase 存储和托管是两项独立的服务。托管服务网站资源,例如 HTML、JS 或您使用 firebase deploy --only hosting
命令通过 CDN 部署的任何静态文件。
最好的选择是将 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
),但您不能撤销这些标记,除非您重新上传图像(使用新标记重命名图像)。