【发布时间】:2022-02-25 11:48:29
【问题描述】:
我有一些通过React.createElement 动态呈现内容的反应代码。因此,css 是通过对象应用的。该动态生成中的元素可以具有背景图像,指向公共 aws S3 存储桶。
似乎每次我的组件重新渲染时,都会再次从 S3 获取背景图像。这会延迟页面渲染。我在所有对象上设置了 Cache-Control 的 S3 元数据。这是背景图像加载的请求和响应标头 -
响应头 -
Accept-Ranges: bytes
Cache-Control: public, max-age=604800
Content-Length: 52532
Content-Type: application/octet-stream
Date: Sun, 06 Feb 2022 05:57:32 GMT
ETag: "f29655808a5f80627d9ea7f44058a5e3"
Last-Modified: Sun, 06 Feb 2022 05:55:10 GMT
Server: AmazonS3
x-amz-meta-filetype: IMAGE
请求标头 -
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9,hi;q=0.8
Cache-Control: no-cache
Connection: keep-alive
Host: <bucket-name>s3.amazonaws.com
Pragma: no-cache
Referer: https://<my-domain>.com/
sec-ch-ua: " Not;A Brand";v="99", "Google Chrome";v="97", "Chromium";v="97"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Linux"
Sec-Fetch-Dest: image
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: cross-site
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36
我可以在“网络”选项卡中看到图像被多次加载,并且它还显示每次都在进行数据传输。我在这里做错了什么?有人可以帮助找到根本原因。谢谢。
【问题讨论】:
-
在有人说之前,我知道背景图片的尺寸太大了,但是由于它是用户定义的,所以用户可以上传一定尺寸的图片。此请求/响应测试数据。感谢理解。
-
嗨@zookastos 你能确认我
ETag标头在不同的调用之间没有变化吗?您的网址是否会以某种方式从一个呼叫更改为另一个?你能考虑一个带有图像元素的预加载阶段吗? -
请给我一些时间来回复您此信息。同时,请您告诉我“预加载阶段”是什么意思。任何到 doc 的链接都会很好。谢谢
-
花点时间看看这篇好文章,它可以帮助理解“预加载阶段”:Better Image Caching with CSS
-
非常感谢这份文档