为什么一张网图放html里0.1秒就加载完了 放fastapi后端requests.get后传回前端要5秒

为什么一张网图放html里0.1秒就加载完了 放fastapi后端requests.get后传回前端要5秒

img

@app.get("/undefined")
def img():
    response = requests.get('https://game.gtimg.cn/images/yxzj/img201606/heroimg/505/505.jpg')
    return StreamingResponse(response.iter_content(), headers=response.headers)

img

img

在FastAPI中请求图片并返回,和直接在HTML中引用图片,两者的加载时间存在差异,可能有以下几个原因:

网络延迟:这可能是最直接的原因。即使图片在本地网络中存储,每次请求仍可能受到网络延迟的影响。如果你在不同的地理位置或不同的网络环境下运行,可能会感觉时间有所变化。
服务器响应时间:HTML直接引用的图片,可能直接从图片的服务器加载,而通过FastAPI请求的图片,则需要先经过你的服务器的请求处理,这可能会增加一些延迟。
FastAPI处理时间:即使FastAPI的requests.get()函数非常快,将响应内容流式传输到前端仍需要一定的时间。这是因为FastAPI需要处理响应内容,并且将它以流式的方式发送给前端。
请求头和响应头的影响:当你使用requests库时,它会自动发送一些额外的请求头(例如User-Agent)。而当你在HTML中直接引用图片时,浏览器会自动发送一些额外的请求头(例如Cookie)。这可能会影响服务器响应的时间。
要优化图片加载时间,可以尝试以下方法:

缓存图片:如果你确定图片不会经常更改,可以将其缓存到你的服务器或客户端,这样每次加载时就不需要再次请求了。
优化网络:如果可能的话,优化你的网络环境和网络架构,以减少网络延迟。
优化FastAPI代码:检查你的FastAPI代码,看看是否有优化的地方。例如,你可以尝试减少处理时间,或者优化你的响应头。
使用CDN:如果你的图片使用量很大,可以考虑使用CDN来分担网络延迟和服务器压力。CDN可以将图片缓存到靠近用户的边缘服务器,从而减少加载时间。
希望这些信息对你有所帮助!