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

干货|小程序性能优化几点实践技巧

,一开始处理方式都是这样,如果数据不多,只有几页可能不会太暴露问题,如果页数过多,几十页甚至上百页情况,list数据会越来越大,每次setData数据就会越来越多,因而每次页面重新渲染节点就会越来越多...[[array1],[array2]]这样格式,然后通过wx:for遍历渲染数据 实践技巧二 1 存在短时间内发起太多图片请求 这个应该好理解,就是渲染页面时,一次性发送了过多图片请求,导致了同一时间发起了过多...实践技巧四 1 key值列表渲染作用 key值列表渲染时候,能够提升列表渲染性能,为什么呢?...、更新值)等操作 ③最后再将vdom渲染成真实页面结构 key值作用就在第二步,当数据改变触发渲染重新渲染时候,会校正带有 key 组件,框架会确保他们被重新排序,而不是重新创建,以确保使组件保持自身状态...key值如果不指明,默认会按数组索引来处理,因而会导致一些类似input等输入框组件值出现混乱问题。

1.4K20

前端高性能滚动 scroll 及页面渲染优化

用户访问过程,还会不断重新重排(reflow)和重绘(repaint)。 其中,用户 scroll 和 resize 行为(即是滑动页面和改变窗口大小)会导致页面不断重新渲染。...显然,如果当你滚动时,像视差网站(戳看看)这样有东西移动时,有可能在多层导致大面积内容调整,这会导致大量绘制工作。...上面简单使用 rAF 例子可以拿到浏览器下试一下,大概功能就是滚动过程,保持以 16.7ms 频率触发事件 handler。...总结一下 防抖动:防抖技术即是可以把多个顺序地调用合并成一次,也就是一定时间内,规定事件被触发次数。...,应用了该属性后,譬如鼠标点击,hover 等功能都将失效,即是元素不会成为鼠标事件 target。

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

【前端性能】高性能滚动 scroll 及页面渲染优化

用户访问过程,还会不断重新重排(reflow)和重绘(repaint)。 其中,用户 scroll 和 resize 行为(即是滑动页面和改变窗口大小)会导致页面不断重新渲染。...显然,如果当你滚动时,像视差网站(戳看看)这样有东西移动时,有可能在多层导致大面积内容调整,这会导致大量绘制工作。  ...,大概功能就是如果 500ms 内没有连续触发两次 scroll 事件,那么才会触发我们真正想在 scroll 事件触发函数。...); 上面简单使用 rAF 例子可以拿到浏览器下试一下,大概功能就是滚动过程,保持以 16.7ms 频率触发事件 handler。...,应用了该属性后,譬如鼠标点击,hover 等功能都将失效,即是元素不会成为鼠标事件 target。

1.9K70

React App 性能优化总结

它会带来很多好处,例如: 零副作用 不可变数据对象更易于创建,测试,和使用; 利于解耦; 更加利于追踪变化; React 环境,我们使用 Component 概念来维护组件内部状态,对状态更改可以导致组建重新渲染...译注:函数组件也可以做纯组件优化:React.memo(…) 是 React v16.6 引入功能。它与 React.PureComponent 类似,它有助于控制 函数组件 重新渲染。...`JavaScript` 事件防抖和节流 事件触发率代表事件处理程序在给定时间内调用次数。 通常,与滚动和鼠标悬停相比,鼠标点击具有较低事件触发率。...在这些情况下,防抖和节流技术可以成为救世主,而不会对事件监听器进行任何更改。 节流 简而言之,节流意味着延迟功能执行。因此,不是立即执行事件处理程序/函数,而是触发事件时添加几毫秒延迟。...您可以限制触发事件次数或延迟正在执行事件来限制程序执行一些昂贵操作。 防抖 与节流不同,防抖是一种防止事件触发器过于频繁触发技术。

7.7K20

性能优化竟白屏,难道真是锅?

项目日渐“强壮”,性能优化方法之一是采用 React 框架提供 Reat.lazy() 按需加载方式,测试过程,QA说优化代码导致了白屏,且看我如何狡辩~ 随着项目日渐“强壮”,优化首屏加载渲染速度迫在眉睫...一、背景 某天开发了某个功能组件时,发现这个组件引用了一个非常大三方库,大概100kb,这么大,当然得使用按需加载啦,当我理所当然地觉得这一手“按需加载”优化很稳,就交给测试同学测试了。...没过多久测试同学反馈,你这个功能咋老白屏?—— 怎么可能?代码不可能有BUG! 来到“事故现场”,稍加思索,打开浏览器控制台,发现按需加载远程文件下载失败了。...render phase 阶段,子节点发生UI渲染抛出错误时候执行,return {hasError: true} 用于更新 state 值,不允许包含副作用代码,触发重新渲染渲染fallback.../components/counter/index')); 经过测试验证,的确打印了错误日志,而只发起了一次网络请求原因是,该 LazyCounter 组件并没有组件声明,重新渲染时候,LazyCounter

1.2K10

性能优化竟白屏,难道真是锅?

项目日渐“强壮”,性能优化方法之一是采用 React 框架提供 Reat.lazy() 按需加载方式,测试过程,QA说优化代码导致了白屏,且看我如何狡辩~ 随着项目日渐“强壮”,优化首屏加载渲染速度迫在眉睫...一、背景 某天开发了某个功能组件时,发现这个组件引用了一个非常大三方库,大概100kb,这么大,当然得使用按需加载啦,当我理所当然地觉得这一手“按需加载”优化很稳,就交给测试同学测试了。...没过多久测试同学反馈,你这个功能咋老白屏?—— 怎么可能?代码不可能有BUG! 来到“事故现场”,稍加思索,打开浏览器控制台,发现按需加载远程文件下载失败了。...render phase 阶段,子节点发生UI渲染抛出错误时候执行,return {hasError: true} 用于更新 state 值,不允许包含副作用代码,触发重新渲染渲染fallback.../components/counter/index')); 经过测试验证,的确打印了错误日志,而只发起了一次网络请求原因是,该 LazyCounter 组件并没有组件声明,重新渲染时候,LazyCounter

86620

开源白板工具 Excalidraw 架构解读

架构设计 模块耦合比较严重,基本核心逻辑都放在 App 类组件里,导致其所在 App.tsx 文件行数达到 8000+ 行。 数据状态大多保存在 App 类组件 state 属性。...工具没有抽成类,它们逻辑混合写在鼠标事件响应函数 handleCanvasPointerDown、handleCanvasPointerMove、handleCanvasPointerUp 。...滚动事件频率很高,每一帧都重渲染,对于图形很多情况下,Excalidraw 是吃不消,因为 Canvas 2D 性能并不高,这时候可以考虑节流或防抖去减少重渲染次数。...我们发现,通过滚轮放大画布时,Excalidraw 图形是模糊鼠标释放时才真正重渲染。 结尾 Excalidraw 作为一款白板工具,功能很完善,美中不足地方就是代码写得太面条。...本文透析了 Excalidraw 图形编辑器上几个比较基础但很重要功能,希望对你进行图形编辑器架构有帮助。 是前端西瓜哥,欢迎关注,学习更多图形编辑器知识。

54731

前端性能优化

编译过程: v-if切换有一个局部编译卸载过程,切换过程合适地销毁和重建内部事件监听和子组件,v-show只是简单基于CSS切换。...10、使用事件委托 事件委托利用了事件冒泡,只指定一个事件处理程序,就可以管理某一类型所有事件。所有用到按钮事件(多数鼠标事件和键盘事件)都适合采用事件委托技术, 使用事件委托可以节省内存。...多个请求和响应在 TCP 连接可以乱序发送,到达目的地后再通过流 ID 重新组建。 首部压缩 HTTP2 提供了首部压缩功能。多请求请求时,有很多消息头都是重复。...遍历渲染树开始布局,计算每个节点位置大小信息。 将渲染树每个节点绘制到屏幕。 重排(回流) 当改变 DOM 元素位置或大小时,会导致浏览器重新生成渲染树,这个过程叫重排。...重绘 当重新生成渲染树后,就要将渲染树每个节点绘制到屏幕,这个过程叫重绘。不是所有的动作都会导致重排,例如改变字体颜色,只会导致重绘。记住,重排会导致重绘,重绘不会导致重排 。

1.2K20

干货 | Taro性能优化之复杂列表篇

二、问题现状及分析 我们以酒店某一多功能列表为例(下图),设定检测标准(setData次数及该setData响应时效作为指标),检测情况如下: 指标 setData次数 渲染耗时(ms) 第一次进入列表页...,导致渲染耗时较长; 2.2  页面筛选项更新卡顿,下拉动画卡顿 筛选项节点过多,更新时setData数据量大; 筛选项组件更新会导致页面跟着一起更新; 2.3  无限列表更新卡顿,滑动过快会白屏...核心思路是只渲染显示屏幕数据,基本实现就是监听 scroll 事件,并且重新计算需要渲染数据,不需要渲染数据留一个空 div 占位元素。...3.6  React.memo 当复杂页面子组件过多时,父组件渲染导致组件跟着渲染,React.memo可以做浅层比较防止不必要渲染: const MyComponent = React.memo...如果你函数组件在给定相同props情况下渲染相同结果,那么你可以通过将其包装在React.memo调用,以此通过记忆组件渲染结果方式来提高组件性能表现。

2K41

ReactPortals传送门

ReactDOM.render将组建渲染到相关结构组件卸载时再将创建div移除,这个方案当然是可行但是并没有那么优雅。...与第三方库集成: 有时候,我们可能需要将React组件与第三方库(例如地图库或视频播放器)集成,使用Portals可以将组件渲染到第三方库所需DOM元素,即将业务需要额外组件渲染到原组件封装好...逻辑分离和组件复用: Portals允许我们将组件渲染输出与组件逻辑分离,我们可以将组件渲染输出定义一个单独Portal组件,并在需要地方使用该Portal,这样可以实现组件复用,并且可以更好地组织和管理代码...处理层叠上下文: 某些情况下,使用Portals可以帮助我们解决层叠上下文stacking context问题,由于Portals可以创建独立DOM渲染容器,因此可以避免由于层叠上下文导致样式和布局问题...,当我们鼠标移动到a上时,会执行a元素绑定事件,当依次将鼠标移动到a、b、c时候,同样会以此执行a、b、c事件绑定函数,并且不会因为冒泡事件导致父元素事件触发,当我们鼠标直接移动到c时候,可以看到依旧是按照

18750

记一次 「 无限滚动 」列表优化

背景 长列表优化, 是页面性能优化一个比较常见问题,也是面试常客。 刚好最近在项目中, 遇到了一个长列表性能问题,试过多种方案, 最后得以解决。 今天就给大家分享一下。...发现,dom卸载/挂载/更新情况都出奇地慢,鼠标已经停下来,能明显感觉到过一会dom才装载完成,所以很可能是dom渲染性能问题。...所以,影响渲染性能元素很可能就是它。 渲染性能 除了组件问题,还有可能是渲染问题。 首先,原来无限滚动逻辑就是基于scroll事件,通过不断滚动触发回调,重新计算渲染到页面上区间。...其实,第二点缩小范围时,应该意识到,空白问题/拖动不流畅均是因为渲染性能低下导致 测试验证 1....无论是选择虚拟长列表or下拉懒加载,使用监听scroll事件或者Intersetion Observer API之间取舍时,可以参考: scroll事件回调会在主线程中被成千上万次调用,尽管加了防抖

3.1K20

BuildAdmin16:边栏隐藏、页面全屏,用vue是如何实现

前言 弹出框五个标签功能重新加载、关闭标签、关闭其他标签、关闭所有标签都已经实现了,现就剩下当前标签全屏标签还没有实现。 BuildAdmin,一共实现了两种全屏。...vue,v-if和v-show同样也是用于决定组件是否渲染(展示),BuildAdmin中使用是v-if。...最外层第一个div,绑定了mouseover和mouseout鼠标进入进出方法。...虽然组件是新建,但是数据还在,在此之前渲染过tabstabsView不是空,所以无法触发原本onMountedactiveRoute赋值,也就无法触发watchselectNavTab。...所以加了最后三行代码,取消全屏重新渲染时候,会触发selectNavTab来渲染滑动块。

40500

实战PerfDog优化小游戏性能

: 为了验证一些猜想,也为了更细致定位问题,我们测试过程做了一些特殊操作: 1.战斗挂机 【为了判断是否是战斗过程触发内存泄露】 2.反复打开关闭UI 【为了判断UI创建与销毁是否存在内存泄露...,那么我们到代码对应位置去找,就可以较快定位原因;最终我们发现是因为自定义一个全局事件监听器实例化了一个对象,但是这个对象一些属性会持续被这个事件监听器所引用而不会被回收 当然为了更快定位哪个函数...勾选或取消勾选复选框可以将其从图表显示或隐藏。 主要关注第三个JS堆内存、节点数量、监听器数量。鼠标移到曲线上,可以左下角显示具体数据。...而我们游戏查看在drawcall后确定是由于游戏运行时drawcall过多导致每帧渲染耗时比较长,所以会呈现一种卡顿现象; 关于查看drawcall等可以通过白鹭自身FPS面板查看 白鹭debug...visible属性为false,否则在第三步还会参与计算 2.不在主循环里创建任何对象,游戏中的人物、怪物、技能特效统统做成对象池 3.不在EnterFrame事件过多操作,非要用可以自定义一些事件

86020

React 函数式组件性能优化指南

React 性能优化思路 觉得 React 性能优化理念主要方向就是这两个: 减少重新 render 次数。...,也就是说上面那个例子,点击改名字之后,仅仅是 title 会变,但是 Child 组件不会重新渲染(表现出来效果就是 Child 里面的 log 不会在控制台打印出来),会直接复用最近一次渲染结果...咱们来分析,一个组件重新重新渲染,一般三种情况: 要么是组件自己状态改变 要么是父组件重新渲染导致组件重新渲染,但是父组件 props 没有改版 要么是父组件重新渲染导致组件重新渲染,但是父组件传递...文章开头就已经说过了,函数式组件里每次重新渲染,函数组件都会重头开始重新执行,那么这两次创建 callback 函数肯定发生了改变,所以导致了子组件重新渲染。...useMemo 文章开头就已经介绍了,React 性能优化方向主要是两个:一个是减少重新 render 次数(或者说减少不必要渲染),另一个是减少计算量。

2.3K10

为什么面试官这么爱问性能优化?

2.代码开发尽量保证写出代码清晰、可维护,比如:清晰目录和文件结构、添加必要注释、提取公共函数公共组件组件单向数据流、组件功能尽量单一等。...dom进行销毁 关注页面中使用到图片大小,推动后端进行图片压缩 地图撒点时使用聚合减少地图引擎渲染压力 对于一些频繁操作使用防抖或节流 使用三方库或组件库尽量采用按需加载,减少打包体积 组件卸载时取消事件监听...、取消组件定时器、销毁一些三方库实例 工作实践也就以上这些,其实就是写代码基本要求,另外觉得如果业务复杂,以上这些也并不能阻止性能问题出现,更多还是当出现了问题,去思考如何解决。...异步渲染节点,留一些中间时间来响应页面其他操作 将触发渲染任务放到队列,在下一帧进行处理,合并掉一些中间状态 对于鼠标移动和滚动场景,通过节流来优化 进行一些取舍,早期节点激活时可以修改节点所有样式...,导致激活操作需要重新计算节点大小,更新节点样式,多选和全选操作下非常耗时,所以后期改为只允许修改不改变节点大小样式属性 其他一些细节优化:对于数据没有改变操作不触发赋值或函数调用,一些不起眼操作可能也是需要耗费时间

20920

TDesign 更新周报(2022年9月第4周)

(#1563 )修复创建条目和选中已有条目同时触发问题完善键盘事件, 创建新条目可通过键盘选择Table: @chaishi (#1562)树形结构,叶子节点缩进距离修正超出省略功能,ellipsisTitle...绑定会报错 ,缺少判空,tdesign-vue-nex#1704 @chaishi (#1562)修复视图切换或表格变化场景下 吸顶吸底效果没有重新渲染计算问题 issue#1529 @uyarn... (#1740)Swiper:修复鼠标悬停移出后没有重新轮播问题 @yusongH (#1717)修复 trriger 属性不生效问题 @yusongH (#1717)修复鼠标悬停移出后没有重新轮播问题... @HQ-Lin (#1736)Dialog: 修复弹窗内按下鼠标,蒙层松开会关闭弹窗问题 @sechi747 (#1739)TreeSelect: 修复 popuoContent 无 padding.../releases/tag/0.11.0解决方案及周边TDesign Vue Next Starter 发布 0.5.2 Features升级组件库依赖至0.23 修复切换页面等场景下表格吸附效果未重新计算导致样式异常

1.2K10

React 函数式组件性能优化指南

React 性能优化思路 觉得 React 性能优化理念主要方向就是这两个: 减少重新 render 次数。...,也就是说上面那个例子,点击改名字之后,仅仅是 title 会变,但是 Child 组件不会重新渲染(表现出来效果就是 Child 里面的 log 不会在控制台打印出来),会直接复用最近一次渲染结果...咱们来分析,一个组件重新重新渲染,一般三种情况: 要么是组件自己状态改变 要么是父组件重新渲染导致组件重新渲染,但是父组件 props 没有改版 要么是父组件重新渲染导致组件重新渲染,但是父组件传递...文章开头就已经说过了,函数式组件里每次重新渲染,函数组件都会重头开始重新执行,那么这两次创建 callback 函数肯定发生了改变,所以导致了子组件重新渲染。...useMemo 文章开头就已经介绍了,React 性能优化方向主要是两个:一个是减少重新 render 次数(或者说减少不必要渲染),另一个是减少计算量。

81520

React 函数式组件怎样进行优化

React 性能优化思路觉得React 性能优化理念主要方向就是这两个:减少重新 render 次数。...点击改名字之后,仅仅是 title 会变,但是 Child 组件不会重新渲染(表现出来效果就是 Child 里面的 log 不会在控制台打印出来),会直接复用最近一次渲染结果。...咱们来分析,一个组件重新重新渲染,一般三种情况:要么是组件自己状态改变要么是父组件重新渲染导致组件重新渲染,但是父组件 props 没有改版要么是父组件重新渲染导致组件重新渲染,但是父组件传递...文章开头就已经说过了,函数式组件里每次重新渲染,函数组件都会重头开始重新执行,那么这两次创建 callback 函数肯定发生了改变,所以导致了子组件重新渲染。...useMemo文章开头就已经介绍了,React 性能优化方向主要是两个:一个是减少重新 render 次数(或者说减少不必要渲染),另一个是减少计算量。

93000

BuildAdmin11:弹出框弹出和隐藏以及标签禁用小skill

其中clientX和clientY是鼠标事件触发时鼠标相对于浏览器窗口位置,通过这两个属性就可以解决开头提到tab栏中点击哪里,弹出框就出现在哪里这个问题。...onContextmenu tabs.vue,一共为弹出框一共定义了五个功能标签。...,只是作为一个入口,将tab对应router和鼠标坐标传递给弹出框组件contextmenuRef函数。...标签禁用 disabled是tabs.vue定义contextmenuItems时设定属性,渲染弹出框时候,就会使用此属性,来判断某些情况下哪些标签会被禁用。...这里加一个大于1判断原因是:首次访问时,是通过getFirstRoute获取路由渲染第一个tab(控制台),这里没有触发route.push跳转,route.path与控制台path就不相等,重新加载就会被禁用

19300
领券