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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

总结

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

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

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

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

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

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

标签:
  • 热门焦点
  • 俄罗斯:将审查iPhone等外国公司设备 保数据安全

    iPhone和特斯拉都属于在各自领域领头羊的品牌,推出的产品也也都是数一数二的,但对于一些国家而言,它们的产品可靠性和安全性还是在限制范围内。近日,俄罗斯联邦通信、信息技术
  • 6月iOS设备性能榜:M2稳居榜首 A系列只能等一手3nm来救

    没有新品发布,自然iOS设备性能榜的上榜设备就没有什么更替,仅仅只有跑分变化而产生的排名变动,毕竟苹果新品的发布节奏就是这样的,一年下来也就几个移动端新品,不会像安卓厂商,一
  • CSS单标签实现转转logo

    转转品牌升级后更新了全新的Logo,今天我们用纯CSS来实现转转的新Logo,为了有一定的挑战性,这里我们只使用一个标签实现,将最大化的使用CSS能力完成Logo的绘制与动画效果。新logo
  • K8S | Service服务发现

    一、背景在微服务架构中,这里以开发环境「Dev」为基础来描述,在K8S集群中通常会开放:路由网关、注册中心、配置中心等相关服务,可以被集群外部访问;图片对于测试「Tes」环境或者
  • 三言两语说透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是两种很有用的技术,可以帮助我们写出更加优雅、泛用的函数。本文将首先介绍柯里化和反柯里化的概念、实现原理和应用
  • 谷歌KDD'23工作:如何提升推荐系统Ranking模型训练稳定性

    谷歌在KDD 2023发表了一篇工作,探索了推荐系统ranking模型的训练稳定性问题,分析了造成训练稳定性存在问题的潜在原因,以及现有的一些提升模型稳定性方法的不足,并提出了一种新
  • 深度探索 Elasticsearch 8.X:function_score 参数解读与实战案例分析

    在 Elasticsearch 中,function_score 可以让我们在查询的同时对搜索结果进行自定义评分。function_score 提供了一系列的参数和函数让我们可以根据需求灵活地进行设置。近期
  • 网红炒股不为了赚钱,那就是耍流氓!

    来源:首席商业评论6月26日高调宣布入市,网络名嘴大v胡锡进居然进军了股市。在一次财经媒体峰会上,几个财经圈媒体大佬就“胡锡进炒股是否知道认真报道”展开讨论。有
  • 外交部:美方应停止在网络安全问题上不负责任地指责他国

      中国外交部今天(16日)举行例行记者会。会上,有记者问,美国情报官员称,他们正在阻拦来自中国以及其他国家的黑客获取相关科研成果。 中方对此有何评论?对此
Top