前端列表数据太多导致页面卡顿就这么处置处罚

打印 上一主题 下一主题

主题 927|帖子 927|积分 2781

实际场景

起首看以下两个实际场景:
   场景一:有一个数据列表,数据量非常大且每一个数据项都有几十列乃至更多,且后端未做分页,一次将所有的数据返回到前端,此时全部渲染用户需要等待很长时间才能看到页面,乃至用户的滑动利用都会比力卡。
场景二:同样有一个数据量非常大的数据列表,后端做了分页,前端一次请求50条数据,页面首次渲染非常快,上拉加载也很流通。随着用户不停上拉加载,页面上的dom越来越多,逐渐的上拉加载就变得卡顿了。
  在以上两个场景中就是我们平常所说的长列表无法避免的题目,紧张缘故原由是页面中的dom太多导致渲染卡顿。现在最优的方案是假造列表
什么是假造列表

   概念:假造列表是一种优化长列表加载性能的技术,通过只渲染用户当前可见的元素,极大地进步了用户体验和应用性能。
  假造列表实现原理

   假造列表的实现原理紧张是对列表的可视地区举行渲染,而对非可看法区不渲染或部分渲染。
  

  • 起首需要准备两个数据源

    • 第一个是原始数据源,用于存放所有的应该渲染到页面上的数据
    • 第二个是部分数据源,用于存放要渲染到可视地区和部分不可视地区的数据,以下是部分数据源生成方式:           部分数据源依赖原始数据源和当前可视地区生成,假设我们盼望页面最多渲染100条实际数据首次渲染时,我们对原始数据举行遍历

      • 若原始数据源长度小于100条,则原始数据源全部加到部分数据源数组中
      • 若原始数据源长度大于100条,则原始数据源中前100条数据加入到部分数据源中,第100条以后的数据以 {} 的情势加入到部分数据源中。
            

      • 特别说明:部分数据源中添加 {}目标时为了占位,即页面中虽然不渲染此条数据,但依然占据位置
            

  • 监听页面滚动事件,更改部分数据源

    • 设置监听事件
      window.removeEventListener('scroll', handleScroll);
      (留意:若利用前端框架或组件库,设置监听事件的方式可以不同,依据实际的事件监听添加方式设置监听事件)
    • 在监听事件 handleScroll 中更新部分数据源           根据滚动的位置,更新部分数据源中的值

      • 通过事件对象的scrollTop属性获取当前滚动的位置
      • 假设每条数据都是同样的高度,获取到一条的高度 itemHeight,则用scrollTop/itemHeight 获取到当前可视地区滚动的位置第index个
      • 遍历原始数据源,若当前数据在 index-50 ~ index+50 之间,则将此条数据加入到部分数据源中,否则,将{}加入到部分数据源中占位
            

  • 将部分数据源遍历渲染到页面上
实战中假造列表的题目及相应解决方案

页面滑动过快可能会有白屏题目,在此仅提供一个思路:可利用骨架屏的方案处置处罚

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

汕尾海湾

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表