热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

分片渲染,Vue虚拟列表

分片渲染,Vue虚拟列表-问题以前在面试中遇到过一个这样的问题:如果给你数据量很大比如十万条,后台又没有分页的功能,那么你怎么操作能减轻浏览器的压力或者说怎样能更流畅的渲染出来。很

问题

以前在面试中遇到过一个这样的问题:如果给你数据量很大比如十万条,后台又没有分页的功能,那么你怎么操作能减轻浏览器的压力或者说怎样能更流畅的渲染出来。

很明显这个问题属于那种没事找事型的,那么既然问出来了,我们还是得探一探究竟。

1.分片渲染

分片渲染顾名思义就是数据分开渲染,这样解决了一次性渲染所带来的卡顿。

实现原理

根据EventLoop原理实现的,代码执行放入执行栈中,同步代码先执行,遇到宏任务放入宏任务队列,遇到微任务放到微任务队列,等同步代码执行完毕之后清空微任务队列,然后再将宏任务队列的第一项放入执行栈中,再进行以上的执行过程,这就形成了事件环机制(每循环一次会执行一个宏任务,并清空对应的微任务队列)

代码实现














上面也说到了分片渲染比一次性渲染的性能更好,但是dom元素还是那么多,实质上并不是最优的解决办法,那么我们来看一看虚拟列表。

2.vue虚拟列表



由上面两张图片可以看出虚拟列表就是只显示滚动条对应视口的相应数据。

实现虚拟列表的思路
1.由于虚拟列表只显示视口的数据,所以不会显示出滚动条,那么我们需要造一个滚动条。
2.造出滚动条之后元素就会被挤到下面 我们需要设置一个相对于父元素的定位。
3.由于设置了定位,当父元素滚动的时候,设置了定位的子元素会相对应的移动,那么我们需要在滚动的时候给子元素动态的设置top的值
4.获取到数据之后,需要根据视口来筛选要显示的数据
代码实现

这个demo是使用vue-cli生成的脚手架。
home.vue

// size:每一个item的高度 remain:要显示几个 items:获取到的数组

virtualList.vue





推荐阅读
  • 从零开始构建完整手机站:Vue CLI 3 实战指南(第一部分)
    本系列教程将引导您使用 Vue CLI 3 构建一个功能齐全的移动应用。我们将深入探讨项目中涉及的每一个知识点,并确保这些内容与实际工作中的需求紧密结合。 ... [详细]
  • 深入解析TCP/IP五层协议
    本文详细介绍了TCP/IP五层协议模型,包括物理层、数据链路层、网络层、传输层和应用层。每层的功能及其相互关系将被逐一解释,帮助读者理解互联网通信的原理。此外,还特别讨论了UDP和TCP协议的特点以及三次握手、四次挥手的过程。 ... [详细]
  • 本文详细探讨了HTML表单中GET和POST请求的区别,包括它们的工作原理、数据传输方式、安全性及适用场景。同时,通过实例展示了如何在Servlet中处理这两种请求。 ... [详细]
  • 深入解析Redis内存对象模型
    本文详细介绍了Redis内存对象模型的关键知识点,包括内存统计、内存分配、数据存储细节及优化策略。通过实际案例和专业分析,帮助读者全面理解Redis内存管理机制。 ... [详细]
  • 探讨如何通过高效的数据库查询和排序策略,优化基于GPS位置信息的附近用户搜索功能,以应对大规模用户数据场景。 ... [详细]
  • 本文探讨了哪些数据库支持队列式的写入操作(即一个键对应一个队列,数据可以连续入队),并且具备良好的持久化特性。这类需求通常出现在需要高效处理和存储大量有序数据的场景中。 ... [详细]
  • Netflix利用Druid实现高效实时数据分析
    本文探讨了全球领先的在线娱乐公司Netflix如何通过采用Apache Druid,实现了高效的数据采集、处理和实时分析,从而显著提升了用户体验和业务决策的准确性。文章详细介绍了Netflix在系统架构、数据摄取、管理和查询方面的实践,并展示了Druid在大规模数据处理中的卓越性能。 ... [详细]
  • 深入解析for与foreach遍历集合时的性能差异
    本文将详细探讨for循环和foreach(迭代器)在遍历集合时的性能差异,并通过实际代码示例和源码分析,帮助读者理解这两种遍历方式的不同之处。文章内容丰富且专业,旨在为编程爱好者提供有价值的参考。 ... [详细]
  • 全面解析运维监控:白盒与黑盒监控及四大黄金指标
    本文深入探讨了白盒和黑盒监控的概念,以及它们在系统监控中的应用。通过详细分析基础监控和业务监控的不同采集方法,结合四个黄金指标的解读,帮助读者更好地理解和实施有效的监控策略。 ... [详细]
  • 本文详细介绍了Grand Central Dispatch (GCD) 的核心概念和使用方法,探讨了任务队列、同步与异步执行以及常见的死锁问题。通过具体示例和代码片段,帮助开发者更好地理解和应用GCD进行多线程开发。 ... [详细]
  • 并发编程 12—— 任务取消与关闭 之 shutdownNow 的局限性
    Java并发编程实践目录并发编程01——ThreadLocal并发编程02——ConcurrentHashMap并发编程03——阻塞队列和生产者-消费者模式并发编程04——闭锁Co ... [详细]
  • 深入解析RDMA中的队列对(Queue Pair)
    本文将详细探讨RDMA架构中的关键组件——队列对(Queue Pair,简称QP),包括其基本概念、硬件与软件实现、QPC的作用、QPN的分配机制以及用户接口和状态机。通过这些内容,读者可以更全面地理解QP在RDMA通信中的重要性和工作原理。 ... [详细]
  • 深入解析 Android IPC 中的 Messenger 机制
    本文详细介绍了 Android 中基于消息传递的进程间通信(IPC)机制——Messenger。通过实例和源码分析,帮助开发者更好地理解和使用这一高效的通信工具。 ... [详细]
  • 优化Flask应用的并发处理:解决Mysql连接过多问题
    本文探讨了在Flask应用中通过优化后端架构来应对高并发请求,特别是针对Mysql 'too many connections' 错误的解决方案。我们将介绍如何利用Redis缓存、Gunicorn多进程和Celery异步任务队列来提升系统的性能和稳定性。 ... [详细]
  • 本文详细介绍了数组和线性表这两种常见的数据结构。数组是一种由类型名、标识符及维度构成的复合数据类型,其元素类型由类型名决定,维数表示数组中元素的数量。线性表则是一种逻辑结构,其中的数据元素呈现一对一的关系,便于实现和操作。 ... [详细]
author-avatar
戴晓珊_340
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有