每页500条数据的渲染优化思路(1)

栏目: Html · 发布时间: 5年前

内容简介:每页返回500条的数据,前端一次渲染用户体验很不好,有哪些方式可以友好的解决这个问题。虽然后端返回了500条数据,但是考虑到以下两点我们并不需要一次性展示500条。一般情况下我们会设置1.5屏到2屏的数据,用来给用户进行初始展示。这里我们吧后端返回的页面数据与ui的数据分两部分维护。

每页返回500条的数据,前端一次渲染用户体验很不好,有哪些方式可以友好的解决这个问题。

分批加载

虽然后端返回了500条数据,但是考虑到以下两点我们并不需要一次性展示500条。

  • ui上并无法展示500条数据,所以一次性渲染500条也没有必要,用户也许只需要看前面20条;
  • 必要时加载,在我们大多数的数据请求以及交互请求中,都是必要时加载,懒加载。那么我们也是这样考虑的。

分批的临界值是多少合适呢

一般情况下我们会设置1.5屏到2屏的数据,用来给用户进行初始展示。这里我们吧后端返回的页面数据与ui的数据分两部分维护。

像百度的图片加载就是每次请求两页的数据,用来给用户体验。

let pageData = [] //len 500
let uiData = [] //len 20
复制代码

写一个loadUiData 以及loadPageData 的方法

既然假定了用户是基于滚动加载得到更多数据的,那么我们需要两个方法,分别获取ui展示的数据,以及每个页面的数据,uiData作为累加值。

每次滚动加载时调用loadUiData,使得uiData.concat(pageData[20,40]),然后记录页数和总数据数,当发现ui的数据已经把当前请求的数据都加载完时,请求新的页面数据(以及loadPageData),然后再调用追加页面数据的一页数量。

加载的时机

刚才讲到分批加载,那么作为分批加载时,一般情况是加载1.5屏或者两屏的数据,当我们发现我们的最后一条数据距离视口还有0.5或者0.3屏时会自动加载,这种是属于隐性无感知的加载;还有一种是明显感知的,是用户距离底部30-50px时,有底部加载的动画或者全屏加载的动画,然后看到新的数据渲染出。

当然也有的站点是滚动到屏幕底部然后再请求数据的。

滚动优化一

我们追加scroll的事件监听,发现其会滚动很多次,重复触发加载事件,对于这样的事件触发我们要加节流或者防抖。控制请求频率。

另外需要注意的时,需要判断当前数据的渲染情况以及滚动情况,在数据没有完全渲染完,用户的滚动条位置还没有到齐位置时,是没有必要加载新的数据的。

要切实的保证,用户的所有加载好的数据展示部分拉到了底部,并且触发了操作,才请求数据,已经在请求数据的过程中不要重复请求。

另外,如果我们的加载数据方法性能不是很好,建议针对自己的用户体验提升方面可以定义自己的滚动监听时机和每次加载的数量,具体衡量是查看一次通讯代价高还是查询大量数据代价高。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

奔跑吧 Linux内核

奔跑吧 Linux内核

张天飞 / 人民邮电出版社 / 2017-9-1 / CNY 158.00

本书内容基于Linux4.x内核,主要选取了Linux内核中比较基本和常用的内存管理、进程管理、并发与同步,以及中断管理这4个内核模块进行讲述。全书共分为6章,依次介绍了ARM体系结构、Linux内存管理、进程调度管理、并发与同步、中断管理、内核调试技巧等内容。本书的每节内容都是一个Linux内核的话题或者技术点,读者可以根据每小节前的问题进行思考,进而围绕问题进行内核源代码的分析。 本书内......一起来看看 《奔跑吧 Linux内核》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换