首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

「前端进阶」高性能渲染十万条数据(虚拟列表)

假设滚动发生,滚动条距顶部的位置为 150px,则我们可得知在 可见区域内的列表项为 第4项至`第13项。 ?...由于只是对 可视区域内的列表项进行渲染,所以为了保持列表容器的高度并可正常的触发滚动,将Html结构设计成如下结构: ...,用于形成滚动条 infinite-list 为列表项的 渲染区域 接着,监听 infinite-list-container的 scroll事件,获取滚动位置 scrollTop 假定 可视区域高度固定...= listData.length * itemSize 可显示的列表项数 visibleCount = Math.ceil(screenHeight / itemSize) 数据的起始索引 startIndex...为了使页面平滑滚动,我们还需要在 可见区域的上方和下方渲染额外的项目,在滚动时给予一些 缓冲,所以将屏幕分为三个区域: 可视区域上方: above 可视区域: screen 可视区域下方: below

10.8K74

鸿蒙开发实战案例:纵向横向列表联动案例

效果图预览使用说明纵向划动列表,内容和行标题保持联动横向划动列表,内容和列标题保持联动实现思路本示例通过将每一个List绑定不同的Scroller对象,通过控制Scroller对象的滚动偏移量,使同一方向滚动的...List的滚动量保持一致,实现横向纵向列表联动。...顶部列表,底部左侧列表,底部右侧列表分别绑定不同的Scroller对象。声明一个变量,存储展示内容横向滚动的偏移量。..., index: number) => item.sticky);}.onScrollFrameBegin((offset: number, state: ScrollState) => { // 下方左侧行标题列表与下方右侧列表的滚动偏移量保持一致...『点赞和评论』,才是我创造的动力;关注小编,同时可以期待后续文章ing,不定期分享原创知识;想要获取更多完整鸿蒙最新学习知识点,可关注B站:码牛课堂;

5310
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    何为 content-visibility?

    好,我们实际开始进行滚动,看看会发生什么: 由于下方的元素在滚动的过程中,出现在视口范围内才被渲染,因此,滚动条出现了明显的飘忽不定的抖动现象。...当然,在向下滚动的过程中,上方消失的已经被渲染过且消失在视口的元素,也会因为消失在视口中,重新被隐藏。因此,即便页面滚动到最下方,整体的滚动条高度还是没有什么变化的。...从上面的例子,也能看到,在利用 content-visibility: auto 处理长文本、长列表的时候。在滚动页面的过程中,滚动条一直在抖动,这不是一个很好的体验。...可访问性功能探究 当然,content-visibility: auto 的特性又引申出了另外一个有意思的点。 如果说可视区外的内容未被渲染,那是否会影响用户进行全文检索呢?...content-visibility: auto 的作用更加类似于虚拟列表,使用它能极大的提升长列表、长文本页面的渲染性能; 合理使用 contain-intrinsic-size 预估设置了content-visibility

    1.6K10

    如何让10万条数据的小程序列表如丝般顺滑

    三.使用自定义组件 可以把列表的一行或者多行封装到自定义组件里,在列表页使用一个组件,只算一个节点,这样你的列表能渲染的数据可以成倍数的增加。...图六 节点渲染示意图 1.listData数组的结构 使用二维数组,因为如果是一维数组,页面滚动需要用setData设置大量的元素isDispaly属性来控制列表的的渲染。...:'',//转化为px高度,因为小程序获取的滚动条高度单位为px aboveShowIndex:0,//已渲染数据的第一条的Index belowShowNum:0,//显示区域下方隐藏的条数...oldSrollTop:0,//记录上一次滚动的滚动条高度,判断滚动方向 prepareNum:5,//可视区域上下方要渲染的数量 throttleTime:...关于页面滚动可以看看:小程序 tab 滚动列表优化方案 7.待优化事项 列表每一行的高度需要固定,不然会导致可视区域数据的index的计算出现误差 渲染玩列表后往回来列表,如果手速过快,会导致above

    69410

    听饿了么前端主管如何解析H5渲染性能

    由此引出了新的问题,浮动元素(渲染层)和合成层的关系。对此我个人做了下总结:若合成层的z-index值小于下方兄弟元素,且他们有重叠,则下方兄弟元素也会被提升为合成层。 ?...上图是饿了么页面的简化场景,区域1是可滑动动画区,使用flex布局实现,区域2是店铺列表,区域3是店铺信息,这两个区域都添加了position:relative。...这种实现方式没有指定浮动层的z-index值,因此在区域1进行滑动的时候,下方的每个店铺列表都会被提升为单独的层。...另外如果元素有动画/过渡效果,可未指定层级顺序高于下方浮动层,此时会假定下方的浮动层在动画期间会受影响,从而无法被压缩。...在没有设置浮动的情况下,每次页面滚动头部和底部就会被重新渲染,解决方案是设置浮动后将这些浮动的头部和底部提升为单独的层。 以上为今天的分享内容,谢谢大家!

    1.2K10

    如何让10万条数据的小程序列表如丝般顺滑

    可视区域上方:above 可视区域:screen 可视区域下方:below 图六 节点渲染示意图 1.listData数组的结构 使用二维数组,因为如果是一维数组,页面滚动需要用setData设置大量的元素...isDispaly属性来控制列表的的渲染。...:'',//转化为px高度,因为小程序获取的滚动条高度单位为px aboveShowIndex:0,//已渲染数据的第一条的Index belowShowNum:0,//显示区域下方隐藏的条数...oldSrollTop:0,//记录上一次滚动的滚动条高度,判断滚动方向 prepareNum:5,//可视区域上下方要渲染的数量 throttleTime:...setData后重新渲染所用的时间对比: 自定义组件重新渲染耗时: 图九 自定义组件重新渲染耗时 虚拟列表重新渲染耗时: 图十 虚拟列表重新渲染耗时 从测试结果可以看出,无论是耗时的次数分布

    2K10

    小程序长列表性能优化实践

    可视区域上方:above 可视区域:screen 可视区域下方:below 图六 节点渲染示意图 1.listData数组的结构 使用二维数组,因为如果是一维数组,页面滚动需要用setData设置大量的元素...isDispaly属性来控制列表的的渲染。...:'',//转化为px高度,因为小程序获取的滚动条高度单位为px aboveShowIndex:0,//已渲染数据的第一条的Index belowShowNum:0,//显示区域下方隐藏的条数...oldSrollTop:0,//记录上一次滚动的滚动条高度,判断滚动方向 prepareNum:5,//可视区域上下方要渲染的数量 throttleTime:...setData后重新渲染所用的时间对比: 自定义组件重新渲染耗时: 图九 自定义组件重新渲染耗时 虚拟列表重新渲染耗时: 图十 虚拟列表重新渲染耗时 从测试结果可以看出,无论是耗时的次数分布,还是最大耗时

    1.1K20

    前端节流(throttle)和防抖动(debounce)

    通常,这类提交 button 的@click响应会给后端发送 api 请求,频繁的点击意味着频繁的请求(流量)——会给后端带来很大的压力;此外,这些回调请求返回后,往往会在前端响应其他事件(如刷新页面)...); if( now - previous > wait ){ previous = now; cb.apply(this, args); } } } 例如滚动加载...,滚动到底部了,数据正在加载,用户重复触发滚动到底部,这时就需要节流,没加载完之前,不会触发第二次  这里的cb就是被执行的回调函数,wait是设定的时间间隔。...,由于算力不足导致的页面颤动现象。...比较常见的抖动场景是在自动索引的搜索设计上;当我们在搜索框内输入不同索引时,页面会频繁计算索引并渲染列表,以致产生抖动。

    3.7K20

    Qml开发中的性能Tips(翻译文)

    1.关于图像性能Tips 1.1 位图格式对比矢量图格式 Qt支持任何标准图像格式,包括PNG和JPEG等位图格式,以及SVG等矢量图形格式。与位图图像相比,渲染SVG图像很慢。...2.关于列表性能Tips ---- 2.1 确保您的数据模型尽可能快 在许多情况下,慢速模型(slow model)实际上是列表滚动性能的瓶颈。请确保数据模型尽可能快。...对于较长的列表,cacheBuffer没有带来好处,因为创建条目的速度与快速滚动时没有缓存的速度相同。...cacheBuffer只是推迟了问题的发生,也就是说,它只是将委托创建的位置推到列表/网格可见部分的上方/下方。...虽然创建列表会慢一些,但是列表滚动会更流畅。 4.1 在过渡动画中尽可能为屏幕的小区域设置动画 如果您需要在一秒钟内移动3个元素,请尝试每次移动300毫秒。

    5K32

    【Flutter】自定义滚动开关

    **我们将在flutter应用程序中使用lite_rolling_switch 包来实现一个自定义滚动开关演示程序,该程序具有吸引人的动画和一些属性。...假设此属性的价值回报为true,则此开关为ON,为OFF则为false。当此属性无效时,开关小部件会失效。 该演示视频展示了如何在颤动中创建自定义滚动开关。...它显示了自定义滚动开关如何在flutter应用程序中使用lite_rolling_switch包工作。...它显示了在用户按下按钮后进行的切换交互,该开关将滚动到具有动画效果的另一侧,并且在滚动该开关时将更改图标和文本。...我们将添加animationDuration手段来延迟动画的开始并添加onChanged表示用户打开或关闭开关的时间。当我们运行应用程序时,我们应该获得屏幕的输出,如屏幕下方的截图所示。

    33.4K60

    Chromium 最新渲染引擎--RenderingNG

    在每一个节点都会对来自上一个节点的“原料”进行深度加工,最终会将初始原料HTML文档渲染成屏幕中的图像信息。...生成「属性树」(property trees) 滚动Scroll:通过修改属性树(上一阶段生成的数据信息),来更新文档或者可滚动元素的偏移量 绘制Paint: 计算显示列表(display list)用于描述如何从...、解码和绘图工作单元:分别将「显示列表」、「编码图像」和「绘画工作单元代码」转化为GPU纹理 关键数据 「GPU纹理」 启动Activate:创建一个合成frame (compositor frame...例如,Canvas API中图像位图和Blobs的生成在一个主线程辅助线程中运行。 同样地,「每个渲染进程只有一个合成器线程」。...渲染进程合成线程中的组件结构 数据处理器data handler:维护一个合成的图层列表layer list、显示列表display lists和属性树property tree 生命周期运行器lifecycle

    1.6K10

    HarmonyOS 开发实践——滑动页面占位符加载完成时延问题分析思路&案例

    场景导入滑动页面占位符加载完成时延:可滚动页面中,滚动停止开始算起,到屏幕内占位符(一般为图片)加载完成。2. 性能指标2.1 性能指标介绍滑动页面占位符加载完成时延的S标为40ms。...2.滑动停止有出现超长帧、异常帧耗时,考虑复用机制失效或者冗余嵌套渲染时延。3.列表中Item占位符图片占位符常常加载的是网络图片,则考虑网络时延。...加载网络图片时,发送图片地址网络请求,接着将返回的数据解码为Image组件中的PixelMap。通过搜索CreateImagePixelMap搜索创建图像像素图,耗时26ms。...实际测试中发现,上拉加载次数越多,占位图加载完成耗时就越久,可以推断出在加载更多数据后的渲染有异常。4.2.2 问题Trace特点1.分析Trace发现列表每次滚动停止触发上拉加载后,会有一个超长帧。...4.2.4 问题总结占位符Image组件加载完成需要通过UI渲染,优化滑动过程中UI组件渲染效率可提高占位符加载完成效率。

    10610

    Chrome 的下一代 Web 渲染架构:RenderingNG

    理念 RenderingNG 的理念是首先实现可靠性的结果,然后是可扩展的性能,最后是可扩展性。 稳定性 满足丰富复杂的用户体验的前提就是提供一个坚如磐石的平台。...滚动最重要的缓存是缓存的 GPU 纹理和显示列表,它允许非常快的滚动,同时最大限度地减少电池消耗并在各种设备上运行良好。...在 Web 上,性能隔离的最佳示例就是滚动。即使在具有大量慢速的 JavaScript 的网站上,滚动也可以非常流畅,因为它运行在不同的线程上,而不必依赖于 JavaScript 和渲染线程。...RenderingNG 会确保每一个可能的滚动都是线程化的,通过缓存,远远超出显示列表到更复杂的情况。示例包括表示固定和粘性定位元素的代码、被动事件监听器和高质量的文本渲染。...阅读过程中有任何问题、想法或者感触也欢迎你在下方留言,也可以在后台回复加群进入食堂的交流群。 沟通创造价值,分享带来快乐。也欢迎你分享给身边有需要的同学,利他就是最好的利己。 ”

    47530

    浏览器渲染(线程视角2)

    ,例如z-index,opacity,filter,positon 内容溢出、需要裁剪的元素导致出现的滚动条也需要被提升为单独一层 image.png 图层绘制(Paint) 分成树生成后,渲染引擎会创建绘制列表...) 看下渲染引擎的图像是如何显示到显示器的,先来看下如下概念 帧、帧率:渲染流水线生成一张图片为一帧,每秒渲染帧数称为帧率,如果每秒帧率为60,则为60FPS, 显卡:显卡的职责就是合成新的图像,并将图像保存在后缓冲区...后缓冲区:一旦显卡把合成的图像保存到后缓冲区,后缓冲区和前缓冲区交换,当滚动或缩放时,渲染引擎通过渲染流水线产生图片并发送到显卡的后缓冲区,显示器刷出图像,显卡更新的频率和显示器刷新频率是一致的,但复杂场景...布局:布局阶段将dom树与样式表styleSheet进行合并计算出最终展示的节点的样式和内容 分层:当界面内元素出现层叠上下文属性时,并且出现了内容溢出,需要裁剪出现滚动条时,就会提升为独立的一层,用层来优化渲染合成图片的速度...绘制:当分层树生成后,渲染引擎会创建绘制列表,绘制的过程中需要使用合成线程来完成 分块:合成线程会将图层划分为图块,视口附近的图块会优先进行合成 栅格化:图块是栅格化的最小单位,将图块生成位图的操作称为栅格化

    2K70

    FL STUDIO2023最新V21版本更细功能介绍

    其次提供了音效编辑器,音效编辑器可以编辑出各类声音针对在不同音乐中所要求的音效,例如各类声音在特定音乐环境中所要展现出的高,低,长,短,延续,间断,颤动,爆发等特殊声效。...创建当今最复杂产品所需的所有功能,包括:效果链、音频发送、侧链控制、高级自动化、插件延迟补偿等......Browser and Playlist没有其他DAW与FL Studio播放列表的灵活性相匹配...频道按钮右键菜单 新的“修补”项在补丁程序中加载频道的插件。 通道机架 现在,当将通道移动到可见范围之外时,会滚动。 混音器 创建新的音频或乐器轨道时,窗口不再自动打开。...在具有 mlisttiple 列的视图中搜索时,选择第一个文件夹。 下载图像后立即显示图像。 在插件数据库中显示有关插件的更多信息。 从右键单击的光标位置开始播放。...播放列表: 音频剪辑淡入淡出 - 编辑 ] 播放列表菜单中的“自动交叉淡入淡出”现在与项目文件一起保存。在新计算机上安装时,现在默认启用淡入淡出编辑模式。

    3.4K20

    如何在单个 Pygame 窗口中显示动态列表

    在一个 Pygame 窗口中显示动态列表,可以使用 Pygame 的文本渲染功能。动态列表指的是内容可以实时更新的列表,例如得分榜、任务列表等。下面我将通过实例来例举我的解决方案。...解决方案为了解决上述问题,我们可以采用以下方法之一:方法一:使用事件循环来管理窗口我们可以修改我们的代码,在主事件循环中不断检查是否有新的棋盘状态可供显示。...ball_offset,row*sq_sz+ball_offset))​ # 更新窗口 pygame.display.flip()​# 退出 Pygamepygame.quit()扩展功能滚动列表...:如果列表项过多,可以加入滚动逻辑。...样式优化:为每一行设置不同的颜色、背景。交互功能:为列表项添加点击或选择功能。通过这种方式,可以轻松地在 Pygame 窗口中显示和更新动态列表!

    11510

    现代图片性能优化及体验优化指南 - 懒加载及异步图像解码方案

    : 可以看到滚动条在向下滚动在不断的抽搐,这是由于下面不在可视区域内的内容,一开始是没有被渲染的,在每次滚动的过程中,才逐渐渲染,以此来提升性能。...因此,它更像是一个虚拟列表的替代方案。...属性的值为 loading=lazy 会告诉浏览器,如果图像位于可视区时,则立即加载图像,并在用户滚动到它们附近时获取其他图像。...而如果我们不希望图片的渲染解码影响页面的其他内容的展示,可以使用 decoding=async 选项,像是这样: 这样,浏览器便会异步解码图像...: 可访问性 & 图片资源的容错及错误处理 感兴趣的可以提前关注。

    99620

    「大众点评点餐」小程序开发经验 03:事件联动

    大体结构为:顶部商家名称,可能会出现黄色横条提示模块;下方左侧为导航菜单栏;下方右侧为每个菜单分类包含的菜品展示列表;底部可能出现购物车模块。...点击下方左侧导航菜单栏,高亮显示被点击的菜单分类,下方右侧对应分类详情模块顶部与右侧滚动区的顶部重合(类似于 HTML 里的锚点功能)。...滚动下方右侧菜品分类详情时,当该分类详情模块顶部接触到滚动区域的顶部,左侧对应的导航菜单栏高亮。...若左侧高亮的导航菜单不在可视区域: 当高亮的导航菜单顶部在左侧 scroll-view 滚动区上方(被遮住了),则将该高亮导航菜单滚动至将高亮导航栏的顶部与左侧可滚动区域顶部重合(高亮菜单为滚动区的第一个分类...当高亮的导航菜单在左侧 scroll-view 滚动区可视区下方,将高亮导航菜单滚动到屏幕中央区域。 顶部下方可能会出现黄条提示文案模块。 底部上方可能会出现购物车模块。

    2.6K40
    领券