我有一个带有用户文档的Firestore。当用户将个人资料图片上传到存储桶时,我会在Cloud Function中调整其大小,然后保存较小的缩略图。现在,我不确定最好的方法是接收它的下载URL,有两种可能:
.getDownloadUrl()
方法在前端获取下载URL。我对这两种解决方案都遇到的问题是
1:URL确实很大,一个页面上有多个用户,这比用户文档的其余部分实际多 2:就速度而言,我不确定是否最好循环浏览用户列表以获取每个用户的缩略图下载URL,但是优点是我不必处理数据库中每次出现的新Profile Pic URL标准化问题
答案 0 :(得分:0)
URL没那么大。在尝试进行优化之前,请先收集一些明确的基准,这些基准表明URL的大小严重影响了页面的性能。如果不需要,请不要对其进行优化。我从未听说有人抱怨下载URL不利于性能。
您不需要遍历所有用户。您应该安排在调整大小时使用户的UID可用,以便您可以更新正确的用户。您可以将UID放在文件上传的路径中并解析出来,也可以在上传时将UID放在对象元数据中。
但这两种方法都是有效的。选择最适合您的那个。在后端生成它可能更容易出错。
答案 1 :(得分:0)
正如道格·史蒂文森(Doug Stevenson)在回答中提到的那样,我还认为您正在尝试优化甚至不是性能或存储问题的东西。但是,如果您仍然想优化URL的大小,那么我有两种解决方案。
我们已经知道,图片的URL类似于以下内容:
<com.google.android.material.navigation.NavigationView
...
...
/>
因此,第一种解决方案是使用tiny.cc之类的服务来缩短链接。还有其他示例,但我认为您可以理解。因此,在上述网址的情况下,将其缩短后,将如下所示:
http:// tiny.cc / 2r4ucz
第二种解决方案要求在数据库中保存两件事。这不是缩短链接,而是存储更少的数据。如您所见,上面的URL是从“ BASE_URL”组合而成的:
num = """
123
456
""".replace('\n', '')
print(repr(num)) # -> '123456'
其中包括项目的名称和存储图像的文件夹的名称。它还包含图像的名称,在我的情况下,该名称是由Firestore生成的ID,并且根据定义是唯一的。最后一部分是令牌ID:
https://firebasestorage.googleapis.com/v0/b/project-id/o/images_folder%2vvTMvCsCRsckpR3R5Qg2s.jpg?alt=media&token=2277f575-8ff7-2211-8262-a28ef679d703
因此,第二种解决方案是仅将图像的ID和令牌存储在数据库中,然后重建整个URL客户端。因此,在上面的示例中,您应该存储的唯一内容是:
https://firebasestorage.googleapis.com/v0/b/project-id/o/images_folder
如果您的用户始终只有一张图片,那么您可以使用来自身份验证过程的2277f575-8ff7-2211-8262-a28ef679d703
代替该随机ID:
Firestore-root
|
--- users (collection)
|
--- uid (document)
|
--- id: vvTMvCsCRsckpR3R5Qg2s
|
--- token: 2277f575-8ff7-2211-8262-a28ef679d703
|
--- //Other user details