You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MERN+AWS S3架构下网页大量图片高效渲染方案求助(解决Airbnb式首页滚动卡顿问题)

MERN+AWS S3架构下网页大量图片高效渲染方案求助(解决Airbnb式首页滚动卡顿问题)

我正在尝试复刻Airbnb的首页,页面需要展示大量图片,但滚动的时候卡顿得特别厉害。目前我用AWS S3存储图片,把生成的公共URL传给前端后,直接放到img标签的src属性里渲染。我使用的技术栈是MERN+AWS S3做图片存储。

生成AWS图片公共链接的函数

下面是我用来从S3提取图片公共链接的函数:

export const extractImageFromS3 = async (folder, imgUuid) => {
    // Define parameters for the image (bucket and object key)
    const bucket = 'sgspots'
    const key = `${folder}/${imgUuid}`


    try {
        const s3 = createS3Client();

        const headParams = {
            Bucket: bucket,
            Key: key,
        };
        // header data
        const headData = await s3.send(new HeadObjectCommand(headParams));

        // Log the full metadata to check its structure
        // console.log("Metadata from S3:", headData);

        // Get the public URL of the image
        const imageUrl = `https://${bucket}.s3.${process.env.AWS_REGION}.amazonaws.com/${key}`;


        // Return the public URL of the image
        return {
            url: imageUrl,
            cacheControl: headData.CacheControl, // Get Cache-Control header
        };
    } catch (err) {
        console.error(`Error fetching imageUuid: ${imgUuid}  from aws:, ${err}`);
    }
};

我检查了浏览器的网络面板,发现滚动时网站会发起更多请求,这应该是卡顿的原因之一。但奇怪的是,当我滚回之前已经浏览过的区域(比如往上滚动)时,页面还是会卡。所以我初步猜测,卡顿可能还和渲染有关——页面一次性需要渲染的元素太多了?

已尝试的解决方案

  • React Virtualized:不确定是不是我操作的问题,但感觉这个组件只能按单行来渲染,而我需要的是每行3列的布局,没找到合适的配置方式
  • 图片缓存:尝试过配置缓存,但没能成功实现预期效果

计划尝试的方案

  • 压缩优化图片尺寸
  • 分页展示(不过理想情况下我更希望页面是单页滚动展示所有内容)

麻烦各位大佬给我一些解决思路,如果有相关的参考内容也请一起分享,谢谢大家!

备注:内容来源于stack exchange,提问作者wei bin lau

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 12:49:52