前端大数据列表展示:分页与滚动加载优化
版权申诉
123 浏览量
更新于2024-09-10
收藏 219KB PDF 举报
"本文主要探讨了JavaScript前端在处理大量数据展示时的方法,特别是分页和滚动加载两种常见策略。在实际开发中,遇到1500条左右数据的列表显示时,可能出现滚动卡顿和事件响应延迟的问题。通过分析,发现主要原因是重排重绘导致的性能瓶颈以及图片资源加载的影响。解决方案包括使用定时器进行延时渲染和实施图片懒加载优化。"
在JavaScript前端开发中,处理大量数据的展示是一项挑战。通常,有两种主流方式:分页和触底加载(滚动加载)。分页是一种传统的处理方式,能够有效地避免一次性加载过多数据导致的性能问题。当每页数据量较大时,可以采用图片懒加载技术,只在图片进入视口时才加载,以提高页面加载速度。然而,当页面包含大量数据时,即使采用分页,也可能出现性能瓶颈。
在本案例中,问题出现在滚动加载的实现上,数据卡片包含图片和文字描述,滚动过程中导致了明显的卡顿。通过浏览器的Performance工具分析,发现主要问题是由于重排重绘频率过高,导致渲染帧率下降。此外,Network面板显示大量图片请求处于pending状态,表明图片加载对页面性能产生了负面影响。
为了解决这个问题,开发者采取了以下措施:
1. 自动触发的延时渲染:利用`setTimeout`创建一个延时渲染机制,分批获取数据并添加到列表,这样可以减少瞬间的渲染压力,避免一次性加载过多元素导致的重排重绘。
```javascript
data() {
return {
count: -1,
params: {
pageNo: 0,
pageSize: 20, // 分页大小,每次加载20条数据
// 其他请求参数
},
dataList: [], // 存储已加载的数据
};
},
methods: {
fetchData() {
// 获取数据的API请求
api.getData(this.params).then((response) => {
const newData = response.data;
this.count = response.totalCount;
this.dataList.push(...newData);
if (this.count > this.dataList.length) {
setTimeout(this.fetchData, 100); // 延时100ms后再次获取数据
}
});
},
},
mounted() {
this.fetchData();
}
```
2. 图片懒加载:为了优化图片加载,可以采用懒加载技术,只有当图片进入用户可视区域时才开始加载。这可以通过监听滚动事件和计算元素距离视口的距离来实现。例如,使用Intersection Observer API可以高效地检测元素是否进入视口。
```javascript
const observer = new IntersectionObserver((entries) => {
entries.forEach((entry) => {
if (entry.isIntersecting) {
entry.target.src = entry.target.dataset.src; // 设置真实图片源,替换占位符
observer.unobserve(entry.target); // 停止观察已加载的图片
}
});
});
document.querySelectorAll('.lazy-img').forEach((img) => {
observer.observe(img);
});
```
通过以上两种优化策略,可以显著改善前端在处理大量数据时的性能问题,提供更流畅的用户体验。在实际开发中,还应该根据项目需求和资源情况,考虑使用虚拟列表、服务端渲染等其他优化手段,以确保页面的高效运行。
2018-07-14 上传
2020-10-22 上传
2022-07-05 上传
2010-09-16 上传
2018-12-24 上传
2021-01-21 上传
2021-07-05 上传
2023-03-15 上传
weixin_38703866
- 粉丝: 5
- 资源: 953
最新资源
- 神奇的出租车flash动画
- go_plugins.rar
- CharLSTM:用于情感分析的双向字符LSTM-Tensorflow实现
- vuejs-router-ex:Vue.js路由器
- UniversalSky:用于Godot引擎的Dynamic Sky和ToD
- saucedemo-app-test
- 2005-2019年江苏大学830电路考研真题
- QuestionAnsweringSystem:QuestionAnsweringSystem是一个Java实现的人机问答系统,能够自动分析问题并给出候选答案
- 毕业设计&课设-给定信道系统函数的均衡器系统的MATLAB设计.zip
- Github-API::snake:一个python:alembic:flaskAPI项目,该用户userbeautifulsoup可以刮取github并获取用户存储库并以JSON形式返回
- 44K222.04
- products_backend
- SX127x和SX1268手册.rar
- 小蚂蚁与蒲公英flash动画
- deepvesselnet:DeepVesselNet深度学习网络的实施
- our-fb-app:扩展了create react应用,以包括Firebase,身份验证,授权和所有可重用组件