最近看了很多开源项目。
发现很多项目中,后端给前端发送音频或图片的方式有所不同,有的是直接返回的地址,有的是读取文件内容再返回文件流。
请问,这两种方式的利弊是什么?哪一种方式更好?
最近看了很多开源项目。
发现很多项目中,后端给前端发送音频或图片的方式有所不同,有的是直接返回的地址,有的是读取文件内容再返回文件流。
请问,这两种方式的利弊是什么?哪一种方式更好?
音频的没做过,但是图片的做过,像网站的电商平台啥的,像图片这种应该属于比较大的数据了,一般都是单独放置在一个服务器中或者没那么多单独一个文件夹中,而数据库不可能存储这种东西,因为太大了,一般存一个地址。前台访问的时候可以直接访问图片地址(由后台读取数据库)。以前是这样做的,这样做就不会占用主服务的网络io了,也就是或当我一个访问页面,页面有10个图片,如果你在这次响应中由后台用流的方式输出到浏览器那么可能会慢,耽误其他数据显示。如果传的是地址,那就很快了,但是图片大的话可能图片不能立即显示,那也没关系,起码页面没卡,浏览器会稍后把图片一个个加载出来。当然如果整个网站只有几个图片,没必要单独建一个服务器或者存储位置,直接写就写吧。
分析各自利弊
文件流:
优点:会减少一次网络请求传输。
缺点:不便于客户端缓存。
文件URL
缺点:会发生网络请求。
有点:客户端较容易缓存。
两种方案都没有绝对的好与坏,根据实际业务场景作出合理的选择。
15 回答8.4k 阅读
7 回答5.3k 阅读
6 回答6.9k 阅读✓ 已解决
8 回答6.2k 阅读
3 回答2k 阅读✓ 已解决
4 回答4.4k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
我理解中,这个是没有什么好坏之分的,主要还是看需求。
资源地址
的前提下,直接给前端返回地址就可以了资源地址
时,比如资源地址
的域名为内网域名,公网访问不到。这时,就需要前/后端在服务端做一层资源转发了,因为浏览器解析不了这个地址,此时就需要文件流。
服务器端,更多的做的是一种资源转发或者资源地址保护: