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

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

内容简介:每页返回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的事件监听,发现其会滚动很多次,重复触发加载事件,对于这样的事件触发我们要加节流或者防抖。控制请求频率。

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

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

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


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

查看所有标签

猜你喜欢:

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

SRE

SRE

贝特西 拜尔 (Betsy Beyer)、等 / 孙宇聪 / 电子工业出版社 / 2016-10-1 / CNY 108.00

大型软件系统生命周期的绝大部分都处于“使用”阶段,而非“设计”或“实现”阶段。那么为什么我们却总是认为软件工程应该首要关注设计和实现呢?在《SRE:Google运维解密》中,Google SRE的关键成员解释了他们是如何对软件进行生命周期的整体性关注的,以及为什么这样做能够帮助Google成功地构建、部署、监控和运维世界上现存最大的软件系统。通过阅读《SRE:Google运维解密》,读者可以学习到......一起来看看 《SRE》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具