当前位置:首页 > 科技  > 软件

项目亮点:分析与解决小程序页面切换过程卡顿的问题

来源: 责编: 时间:2024-06-05 17:46:34 258观看
导读在微信小程序的开发过程中,发现部分页面的切换动画在真机调试时,非常卡顿。页面切换是指从一个页面,切换到另外一个页面。反复查看了自己的代码,也没有发现自己写了任何非常耗时的操作,因此非常迷惑。思考了多种方案没有效

z8K28资讯网——每日最新资讯28at.com

在微信小程序的开发过程中,发现部分页面的切换动画在真机调试时,非常卡顿。z8K28资讯网——每日最新资讯28at.com

页面切换是指从一个页面,切换到另外一个页面。z8K28资讯网——每日最新资讯28at.com

反复查看了自己的代码,也没有发现自己写了任何非常耗时的操作,因此非常迷惑。z8K28资讯网——每日最新资讯28at.com

思考了多种方案没有效果,于是在网上找了一种说法,一篇文章说,在全局样式中新增如下属性,就可以解决。z8K28资讯网——每日最新资讯28at.com

page {  -webkit-overflow-scrolling: touch;}

病急乱投医试了一下,很可惜没有效果。后来想起来了这条属性是用来解决 iOS 使用 overflow: scroll 滚动不流畅的问题的。z8K28资讯网——每日最新资讯28at.com

于是,在没有头绪的情况下,我启用了我的找 bug 的终极大招:删除定位法。z8K28资讯网——每日最新资讯28at.com

删除定位法:先删除部分代码,再执行页面,查看卡顿问题是否消失。如果没有,则删除其他部分的代码,直到找到问题代码为止。z8K28资讯网——每日最新资讯28at.com

该方法在我的十多年中,所向披靡,战功显赫。果不其然,我最终找到了问题所在。z8K28资讯网——每日最新资讯28at.com

在该页面组件中,我写了这样一段代码。z8K28资讯网——每日最新资讯28at.com

useEffect(() => {  ad.current = Taro.createRewardedVideoAd({    adUnitId: ads.ad15  })  ...}, [])

在微信小程序中,createRewardedVideoAd 方法是用来提前创建激励广告实例,以便于读者在点击按钮观看广告时,广告已经创建好了,而不用等待那么久。z8K28资讯网——每日最新资讯28at.com

很显然,该方法是一个耗时操作。页面如下:z8K28资讯网——每日最新资讯28at.com

z8K28资讯网——每日最新资讯28at.com

但是这里一个很具有迷惑性的地方在于,实际上我调用该方法的时机,已经在组件创建完成之后了。z8K28资讯网——每日最新资讯28at.com

useEffect(() => {  // 组件创建完成之后}, [])

因此,我就有点懵了,为什么组件创建完成之后调用该方法,还是会卡顿呢?z8K28资讯网——每日最新资讯28at.com

后面从结果反推之后,我才想明白,微信小程序页面切换到详细逻辑应该是。z8K28资讯网——每日最新资讯28at.com

1. 创建新页面实例2. 执行入场动画 「问题是入场动画卡顿」

那么此时如果我们在页面实例创建完成之后立马执行一个耗时任务,就会跟入场动画抢占主线程资源,从而导致渲染卡顿。z8K28资讯网——每日最新资讯28at.com

想明白了这个过程之后,解决的办法就非常简单了,我们只需要在入场动画执行结束之后,再执行耗时任务即可。因此,我们可以使用定时器来推后耗时任务的执行。z8K28资讯网——每日最新资讯28at.com

useEffect(() => {  setTimeout(() => {    ad.current = Taro.createRewardedVideoAd({      adUnitId: ads.ad15    })  }, 200)  ...}, [])

再保存,重试,发现所有卡顿的页面都流畅了!完美解决。z8K28资讯网——每日最新资讯28at.com

在客户端开发的过程中,还有可能会遇到另外一种情况会导致页面卡顿。不过这种情况与我这次遇到的这个卡顿的表现会有点不太一样。这种情况的表现为:z8K28资讯网——每日最新资讯28at.com

当我点击按钮之后,过了很长时间切换动画才开始执行。z8K28资讯网——每日最新资讯28at.com

通常情况下,造成这种卡顿的原因是因为页面初始化时执行的逻辑过多,或者渲染的内容多过,导致初始化时间过长,从而造成反应缓慢。解决的办法就是通过懒加载延后处理和渲染非首屏内容。z8K28资讯网——每日最新资讯28at.com

总结

该场景的问题与解决方案可以当做项目亮点在面试中去介绍。无论是找到问题的思路,还是解决的思路都可以展开聊很多。z8K28资讯网——每日最新资讯28at.com

对于浏览器的渲染机制和事件循环了解非常深刻的朋友可以快速想明白卡顿的原因所在,在面试中,基于这个场景延展出来自己对渲染原理的理解,那么你的面试过程将会非常有质量。z8K28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-92176-0.html项目亮点:分析与解决小程序页面切换过程卡顿的问题

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 现在停止滥用useMemo吧!

下一篇: 拼多多面试:Netty如何解决粘包问题?

标签:
  • 热门焦点
  • 直屏旗舰来了 iQOO 12和K70 Pro同台竞技

    旗舰机基本上使用的都是双曲面屏幕,这就让很多喜欢直屏的爱好者在苦等一款直屏旗舰,这次,你们等到了。据博主数码闲聊站带来的最新爆料称,Redmi下代旗舰K70 Pro和iQOO 12两款手
  • 中兴AX5400Pro+上手体验:再升级 双2.5G网口+USB 3.0这次全都有

    2021年11月的时候,中兴先后发布了两款路由器产品,中兴AX5400和中兴AX5400 Pro,从产品命名上就不难看出这是隶属于同一系列的,但在外观设计上这两款产品可以说是完全没一点关系
  • 2023 年的 Node.js 生态系统

    随着技术的不断演进和创新,Node.js 在 2023 年达到了一个新的高度。Node.js 拥有一个庞大的生态系统,可以帮助开发人员更快地实现复杂的应用。本文就来看看 Node.js 最新的生
  • 十个简单但很有用的Python装饰器

    装饰器(Decorators)是Python中一种强大而灵活的功能,用于修改或增强函数或类的行为。装饰器本质上是一个函数,它接受另一个函数或类作为参数,并返回一个新的函数或类。它们通常用
  • 微信语音大揭秘:为什么禁止转发?

    大家好,我是你们的小米。今天,我要和大家聊一个有趣的话题:为什么微信语音不可以转发?这是一个我们经常在日常使用中遇到的问题,也是一个让很多人好奇的问题。让我们一起来揭开这
  • 三分钟白话RocketMQ系列—— 如何发送消息

    我们知道RocketMQ主要分为消息 生产、存储(消息堆积)、消费 三大块领域。那接下来,我们白话一下,RocketMQ是如何发送消息的,揭秘消息生产全过程。注意,如果白话中不小心提到相关代
  • 微博大门常打开,迎接海外画师漂洋东渡

    作者:互联网那些事“起猛了,我能看得懂日语了”。“为什么日本人说话我能听懂?”“中文不像中文,日语不像日语,但是我竟然看懂了”…&hell
  • 消息称小米汽车开始筛选交付中心:需至少120个车位

    IT之家 7 月 7 日消息,日前,有微博简介为“汽车行业从业者、长三角一体化拥护者”的微博用户 @长三角行健者 发文表示,据经销商集团反馈,小米汽车目前
  • SN570 NVMe SSD固态硬盘 价格与性能兼具

    SN570 NVMe SSD固态硬盘是西部数据发布的最新一代WD Blue系列的固态硬盘,不仅闪存技术更为精进,性能也得到了进一步的跃升。WD Blue SN570 NVMe SSD的包装外
Top