为移动设备提供图像的最佳方法
Best approach for serving images for mobile
我目前正在开发支持应用程序用户配置文件的后端系统。该系统与 Android
和 iOS
应用程序集成。在移动应用程序中,有一个用于显示用户个人资料图像的个人资料页面、用于更改图像的按钮和其他详细信息。
图片必须采用 JPEG
或 PNG
格式,并且最大尺寸限制为 2MB
。
目前我的后端通过以下方式上传和提供图片:
- 当图像作为
multipart/form-data
发送时,在 SQL database
中提取、插入或更新图像的元数据(如果已经存在),并将图像保存在资产目录中。
- 当在
HTTP GET
中请求图像时,它会以 Base64 编码形式发回 data-uri
;在浏览器中,我可以将其显示为 HTML
img 标签 src 属性的一部分。
现在移动应用程序开发人员要求我更改服务(下载)过程,如(2)中所述。具体来说,他们要求用 link 响应服务器中的静态图像,而不是编码的 Uri
。
现在,我已经阅读了一些关于使用 data-uri
的要点,以及它如何使图像传输更便携(我可以同时支持 JPEG
和 PNG
而无需任何修改在浏览器上支持不同的格式);另一方面,我还阅读了 Base64
编码图像与原始二值图像相比如何变得更大,响应有效载荷如何变得更大,这意味着更多的飞行处理并且在移动网络上可能会变慢。
现在,我不确定哪种方法最合适。移动应用程序仅在单击配置文件时才需要显示图像。他们可以将图像保存为移动文件系统中的应用程序数据,或者每次获取图像并显示它。
如果有人能帮助回答以下问题,那就太好了:
- 我应该继续以
data-uri
的形式提供图像,还是更改后端以将 link 提供给静态文件?
- 根据我的用例,这两种方法在性能上是否存在差异?
- 对于移动应用程序,与
data-uri
相比,对静态文件使用 link 是否更有利(我的意思是更容易在代码中实现和维护)?
我应该继续将图像作为 data-uri 提供,还是更改后端以将 link 提供给静态文件?
我会继续将图像作为 data-uri 提供。这意味着您可能会将数据从数据库中的 blob 中提取出来,然后将其一起发送。这允许在数据库中更新数据,而不必担心在服务器端更新静态图像。
根据我的用例,这两种方法在性能上是否存在差异?
静态图像可能更快,因为正如您所说,base64 图像可以更大。但是,可能也不是。您可能应该将图像限制为最大尺寸,and/or 在他们上传时将其调整为最大尺寸。我不会太担心,我已经编写了几个应用程序,可以在几秒钟内读取数百张 base64 图像,没有明显的延迟。
对于移动应用程序,与 data-uri 相比,对静态文件使用 links 是否更有利(我的意思是更容易在代码中实现和维护)?
使用 data-uri 可能更容易,因为移动应用程序需要将其转换为适用于 ImageView 或任何需要显示它的文件格式。
如果图片仅供用户在其设备上使用,您真的需要让他们上传吗? (如果您希望相同的个人资料图片出现在他们拥有的每台设备上,您会这样做)或者,它是否可以仅存储在本地应用程序数据存储或本地 SQLite 数据库中?
我目前正在开发支持应用程序用户配置文件的后端系统。该系统与 Android
和 iOS
应用程序集成。在移动应用程序中,有一个用于显示用户个人资料图像的个人资料页面、用于更改图像的按钮和其他详细信息。
图片必须采用 JPEG
或 PNG
格式,并且最大尺寸限制为 2MB
。
目前我的后端通过以下方式上传和提供图片:
- 当图像作为
multipart/form-data
发送时,在SQL database
中提取、插入或更新图像的元数据(如果已经存在),并将图像保存在资产目录中。 - 当在
HTTP GET
中请求图像时,它会以 Base64 编码形式发回data-uri
;在浏览器中,我可以将其显示为HTML
img 标签 src 属性的一部分。
现在移动应用程序开发人员要求我更改服务(下载)过程,如(2)中所述。具体来说,他们要求用 link 响应服务器中的静态图像,而不是编码的 Uri
。
现在,我已经阅读了一些关于使用 data-uri
的要点,以及它如何使图像传输更便携(我可以同时支持 JPEG
和 PNG
而无需任何修改在浏览器上支持不同的格式);另一方面,我还阅读了 Base64
编码图像与原始二值图像相比如何变得更大,响应有效载荷如何变得更大,这意味着更多的飞行处理并且在移动网络上可能会变慢。
现在,我不确定哪种方法最合适。移动应用程序仅在单击配置文件时才需要显示图像。他们可以将图像保存为移动文件系统中的应用程序数据,或者每次获取图像并显示它。
如果有人能帮助回答以下问题,那就太好了:
- 我应该继续以
data-uri
的形式提供图像,还是更改后端以将 link 提供给静态文件? - 根据我的用例,这两种方法在性能上是否存在差异?
- 对于移动应用程序,与
data-uri
相比,对静态文件使用 link 是否更有利(我的意思是更容易在代码中实现和维护)?
我应该继续将图像作为 data-uri 提供,还是更改后端以将 link 提供给静态文件?
我会继续将图像作为 data-uri 提供。这意味着您可能会将数据从数据库中的 blob 中提取出来,然后将其一起发送。这允许在数据库中更新数据,而不必担心在服务器端更新静态图像。
根据我的用例,这两种方法在性能上是否存在差异?
静态图像可能更快,因为正如您所说,base64 图像可以更大。但是,可能也不是。您可能应该将图像限制为最大尺寸,and/or 在他们上传时将其调整为最大尺寸。我不会太担心,我已经编写了几个应用程序,可以在几秒钟内读取数百张 base64 图像,没有明显的延迟。
对于移动应用程序,与 data-uri 相比,对静态文件使用 links 是否更有利(我的意思是更容易在代码中实现和维护)?
使用 data-uri 可能更容易,因为移动应用程序需要将其转换为适用于 ImageView 或任何需要显示它的文件格式。
如果图片仅供用户在其设备上使用,您真的需要让他们上传吗? (如果您希望相同的个人资料图片出现在他们拥有的每台设备上,您会这样做)或者,它是否可以仅存储在本地应用程序数据存储或本地 SQLite 数据库中?