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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

总结

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

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

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

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

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

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

标签:
  • 热门焦点
  • 5月安卓手机好评榜:魅族20 Pro夺冠

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年5月1日至5月31日,仅限国内市场。第一名:魅族20 Pro好评率:97.50%不得不感慨魅族老品牌还
  • 摸鱼心法第一章——和配置文件说拜拜

    为了能摸鱼我们团队做了容器化,但是带来的问题是服务配置文件很麻烦,然后大家在群里进行了“亲切友好”的沟通图片图片图片图片对比就对比,简单对比下独立配置中心和k8s作为配
  • 服务存储设计模式:Cache-Aside模式

    Cache-Aside模式一种常用的缓存方式,通常是把数据从主存储加载到KV缓存中,加速后续的访问。在存在重复度的场景,Cache-Aside可以提升服务性能,降低底层存储的压力,缺点是缓存和底
  • 三万字盘点 Spring 九大核心基础功能

    大家好,我是三友~~今天来跟大家聊一聊Spring的9大核心基础功能。话不多说,先上目录:图片友情提示,本文过长,建议收藏,嘿嘿嘿!一、资源管理资源管理是Spring的一个核心的基础功能,不
  • 猿辅导与新东方的两种“归途”

    作者|卓心月 出品|零态LT(ID:LingTai_LT)如何成为一家伟大企业?答案一定是对“势”的把握,这其中最关键的当属对企业战略的制定,且能够站在未来看现在,即使这其中的
  • 花7万退货退款无门:谁在纵容淘宝珠宝商家造假?

    来源:极点商业作者:杨铭在淘宝购买珠宝玉石后,因为保证金不够赔付,店铺关闭,退货退款难、维权无门的比比皆是。“提供相关产品鉴定证书,支持全国复检,可以30天无理由退换货。&
  • 余承东:AI大模型技术的发展将会带来下一代智能终端操作系统的智慧体验

    8月4日消息,2023年华为开发者大会(HDC.Together)今天正式开幕,华为发布HarmonyOS 4、全新升级的鸿蒙开发套件、HarmonyOS Next开发者预览版本等一系列
  • iQOO 11S评测:行业唯一的200W标准版旗舰

    【Techweb评测】去年底,iQOO推出了“电竞旗舰”iQOO 11系列,作为一款性能强机,该机不仅全球首发2K 144Hz E6全感屏,搭载了第二代骁龙8平台及144Hz电竞
  • 到手价3099元起!iQOO Neo8 Pro今日首销:安卓性能最强旗舰

    5月23日,iQOO如期举行了新品发布会,全新的iQOO Neo8系列也正式与大家见面,包含iQOO Neo8和iQOO Neo8 Pro两个版本,其中标准版搭载高通骁龙8+,而Pro版更
Top