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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

总结

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

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

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

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

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

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

标签:
  • 热门焦点
  • 对标苹果的灵动岛 华为带来实况窗功能

    继苹果的灵动岛之后,华为也在今天正式推出了“实况窗”功能。据今天鸿蒙OS 4.0的现场演示显示,华为的实况窗可以更高效的展现出实时通知,比如锁屏上就能看到外卖、打车、银行
  • 把LangChain跑起来的三个方法

    使用LangChain开发LLM应用时,需要机器进行GLM部署,好多同学第一步就被劝退了,那么如何绕过这个步骤先学习LLM模型的应用,对Langchain进行快速上手?本片讲解3个把LangChain跑起来
  • 服务存储设计模式:Cache-Aside模式

    Cache-Aside模式一种常用的缓存方式,通常是把数据从主存储加载到KV缓存中,加速后续的访问。在存在重复度的场景,Cache-Aside可以提升服务性能,降低底层存储的压力,缺点是缓存和底
  • 如何使用JavaScript创建一只图像放大镜?

    译者 | 布加迪审校 | 重楼如果您曾经浏览过购物网站,可能遇到过图像放大功能。它可以让您放大图像的特定区域,以便浏览。结合这个小小的重要功能可以大大改善您网站的用户体验
  • 使用AIGC工具提升安全工作效率

    在日常工作中,安全人员可能会涉及各种各样的安全任务,包括但不限于:开发某些安全工具的插件,满足自己特定的安全需求;自定义github搜索工具,快速查找所需的安全资料、漏洞poc、exp
  • “又被陈思诚骗了”

    作者|张思齐 出品|众面(ID:ZhongMian_ZM)如今的国产悬疑电影,成了陈思诚的天下。最近大爆电影《消失的她》票房突破30亿断层夺魁暑期档,陈思诚再度风头无两。你可以说陈思诚的
  • 大厂卷向扁平化

    来源:新熵作者丨南枝 编辑丨月见大厂职级不香了。俗话说,兵无常势,水无常形,互联网企业调整职级体系并不稀奇。7月13日,淘宝天猫集团启动了近年来最大的人力制度改革,目前已形成一
  • iQOO 11S评测:行业唯一的200W标准版旗舰

    【Techweb评测】去年底,iQOO推出了“电竞旗舰”iQOO 11系列,作为一款性能强机,该机不仅全球首发2K 144Hz E6全感屏,搭载了第二代骁龙8平台及144Hz电竞
  • 微软发布Windows 11新版 引入全新任务栏状态

    近日,微软发布了Windows 11新版,而Build 22563更新主要引入了几周前曝光的平板模式任务栏等,系统更流畅了。更新中,Windows 11加入了专门针对平板优化的任务栏
Top