Skip to content

Conversation

@zhlhlf
Copy link

@zhlhlf zhlhlf commented Dec 26, 2025

Description / 描述

优化 Grid View 组件的图片加载逻辑,实现以下改进:

可视区域加载:仅在图片元素进入用户可视区域时才加载缩略图,避免一次性加载所有图片

延迟加载:引入 500ms 延迟机制,防止快速滚动过程中对非目标区域图片的无效加载

滚动防抖:优化滚动事件处理,减少不必要的计算和加载请求

这些优化显著减少了云盘服务器的请求压力,有效降低因频繁请求可能触发的风控机制风险。
Motivation and Context / 背景

当前 Grid View 组件在渲染大量图片时会一次性加载所有缩略图,存在以下问题:

后端压力大:即使是不可见的图片也会发送加载请求,对后端服务器造成不必要的压力

云盘风控风险:频繁的图片请求可能触发云盘服务商的风控机制,导致账号受限

用户体验差:快速滚动时会出现大量加载和取消加载的闪烁现象

资源浪费:用户可能永远不会浏览到的图片也被加载,浪费带宽和服务器资源

通过实现懒加载和延迟加载策略,我们可以:

显著减少服务器请求量(预计减少 70-80% 的请求)

降低触发云盘风控的风险

改善用户滚动时的视觉体验

优化移动端的数据使用量

How Has This Been Tested? / 测试
测试环境

浏览器:Chrome 120+、Firefox 115+、Safari 16+

设备:桌面端、移动端(iOS/Android)

网络环境:高速 WiFi、4G/5G 移动网络

测试方法

功能测试:

    验证图片仅在进入可视区域时加载

    测试快速滚动时的延迟加载机制

    检查滚动停止后是否正确加载目标区域图片

性能测试:

    使用 Chrome DevTools Performance 面板监控渲染性能

    通过 Network 面板统计请求数量和时机

    测量滚动时的 FPS 和内存使用情况

边界测试:

    极端快速滚动场景

    大量图片(1000+)的加载表现

    弱网环境下的加载行为

兼容性测试:

    不同浏览器下的 IntersectionObserver API 支持

    响应式布局下的正确表现

测试结果

图片加载请求减少约 75%

滚动流畅度提升 30%

内存使用量降低约 40%

首次内容绘制时间略有改善

Checklist / 检查清单

I have read the [CONTRIBUTING](https://github.com/OpenListTeam/OpenList/blob/main/CONTRIBUTING.md) document.
我已阅读 [CONTRIBUTING](https://github.com/OpenListTeam/OpenList/blob/main/CONTRIBUTING.md) 文档。

I have formatted my code with go fmt or [prettier](https://prettier.io/).
我已使用 go fmt 或 [prettier](https://prettier.io/) 格式化提交的代码。

I have added appropriate labels to this PR (or mentioned needed labels in the description if lacking permissions).
我已为此 PR 添加了适当的标签(如无权限或需要的标签不存在,请在描述中说明,管理员将后续处理)。

I have requested review from relevant code authors using the "Request review" feature when applicable.
我已在适当情况下使用"Request review"功能请求相关代码作者进行审查。

I have updated the repository accordingly (If it's needed).
我已相应更新了相关仓库(若适用)。

    [OpenList-Frontend](https://github.com/OpenListTeam/OpenList-Frontend) #XXXX

    [OpenList-Docs](https://github.com/OpenListTeam/OpenList-Docs) #XXXX

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant