小程序canvas画画板签字版,touchmove时卡顿的问题(根本原因是因为vue语法中page.data导致视图层和逻辑层的频繁通讯导致)

起因

因为要做一个画画板的功能,所以使用了canvas组件,一开始好多人说小程序canvas性能特别差,也没太注意,做出来之后确实有点卡,而且每一笔touchmove时间越长越卡,最终导致页面卡到无法使用,起初我也以为是canvas卡。

开始找原因

canvas优化

第一步肯定是先找一下canvas的问题,网上搜到一些材料优化canvas的思路,无非就是以下几种,详细的可以参考我的另一个文章

  1. 绘制的图形的数量和大小会影响canvas的性能, 减少绘制物,减少绘制指令
  2. 图形数量过多,但是只刷新部分 可以使用局部渲染
  3. 逻辑层和背景图层分离 可以使用分层渲染
  4. 某些长时间的逻辑影响主线程的, 可以使用离屏渲染 和webworker 来解决问题

这里做了两个优化:

  1. 禁用滚动,一开始一直卡的不行,后来查资料发现滚动跟touchmove事件有冲突,禁用之后好了许多
  2. 将ctx.stroke()指令放到定时器中执行,每50ms执行一次,这样就是一个固定频率执行,不会因为频繁触发touchmove导致ctx.stroke()一秒钟执行几百几千次

经过处理,这些已经好了很多,但是当绘画事件变长时还是会变得越来越卡,直到最后卡的,动不了,延迟十几秒那种,所以继续找问题

<
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

huihttp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值