小程序
小游戏
企业微信
微信支付
扫描小程序码分享
真机运行项目时(双端都是),随着时间的递增运行越来越卡,但是PC端就不会那么明显,哪里写错了吗?
4 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
之前也碰到canvas绘制久了就越来越卡顿的问题,这个应该是微信原生canvas的bug,使用webview来处理的话,跑多久都不会变慢。
你使用下面这个代码来清除画布,可以把速度还原,但如果绘制久了,还是一样会再次变慢。
wx.drawCanvas({
canvasId: 'canvasId',
actions: [],
reserve: false
})
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
好的 谢谢你的回答 有时间我去试试
获取数据你可以开个worker线程,应该是不存在运行时间越久越卡顿这种情况的
另开线程里面不能用wx的api吧,这个线程到底有什么用 我还是没有想明白
worker线程专门用来发起请求,和主线程交换数据,调用canvas api的肯定是主线程
https://developers.weixin.qq.com/s/Krp10nmn7H3k主要优化两点 1. 使用 requestAnimationFrame 进行帧绘制,能保证在绘制耗时比较大的情况下自动降帧而不丢帧。即使是使用 setTimeout 也尽量不要使用 setInterval,setInterval 会在计时器触发时直接执行,而这时上一帧的绘制过程可能因为某些原因还未完毕。
2. storke, clear, draw 的过程尽量在每一帧绘制时一次性执行。
谢谢,我试试
还有就是,这段代码的意义我没明白直接这样,效率还会更高
核心就是,单帧内减少 Canvas API 调用次数
requestAnimationFrame只有小游戏的canvasAPI才有吧?
那段代码是绘制8个点
哇 这示波器效果~
你12条线路是单独画的,每条线路会有单独的定时器,但是事件处理队列是同一个,也就是相当于是系统有3ms来完成一截图的绘制。。手机上性能远不如PC(龙芯机器除外)。。如果每条线的进度可以是一样的,能不能试试用一个定时器来做,每次画这一竖条下来
用一个定时器绘制一条线也会卡
在你的真实情况里,这个些数据是一开始就有一个时间段的,还是实时获取的呢?
项目里面是根据蓝牙设备返回来的数据实时显示波形的,但是现在来看 获取数据就已经很耗费性能了 到时候在绘制这个动画 我感觉可能会卡蹦程序 现在在考虑如何优化
能不能用俩canvas
一个把源数据画线,做成临时文件的图。。这个canvas通过绝对定位隐藏起来。。
一个把生成的图拿来移动显示
现在不是移动的问题 我感觉像是canvas绘制的太久 就会变卡
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
之前也碰到canvas绘制久了就越来越卡顿的问题,这个应该是微信原生canvas的bug,使用webview来处理的话,跑多久都不会变慢。
你使用下面这个代码来清除画布,可以把速度还原,但如果绘制久了,还是一样会再次变慢。
wx.drawCanvas({
canvasId: 'canvasId',
actions: [],
reserve: false
})
好的 谢谢你的回答 有时间我去试试
获取数据你可以开个worker线程,应该是不存在运行时间越久越卡顿这种情况的
另开线程里面不能用wx的api吧,这个线程到底有什么用 我还是没有想明白
worker线程专门用来发起请求,和主线程交换数据,调用canvas api的肯定是主线程
https://developers.weixin.qq.com/s/Krp10nmn7H3k主要优化两点 1. 使用 requestAnimationFrame 进行帧绘制,能保证在绘制耗时比较大的情况下自动降帧而不丢帧。即使是使用 setTimeout 也尽量不要使用 setInterval,setInterval 会在计时器触发时直接执行,而这时上一帧的绘制过程可能因为某些原因还未完毕。
2. storke, clear, draw 的过程尽量在每一帧绘制时一次性执行。
谢谢,我试试
还有就是,这段代码的意义我没明白
直接这样,效率还会更高
核心就是,单帧内减少 Canvas API 调用次数
requestAnimationFrame只有小游戏的canvasAPI才有吧?
那段代码是绘制8个点
哇 这示波器效果~
你12条线路是单独画的,每条线路会有单独的定时器,但是事件处理队列是同一个,也就是相当于是系统有3ms来完成一截图的绘制。。手机上性能远不如PC(龙芯机器除外)。。如果每条线的进度可以是一样的,能不能试试用一个定时器来做,每次画这一竖条下来
用一个定时器绘制一条线也会卡
在你的真实情况里,这个些数据是一开始就有一个时间段的,还是实时获取的呢?
项目里面是根据蓝牙设备返回来的数据实时显示波形的,但是现在来看 获取数据就已经很耗费性能了 到时候在绘制这个动画 我感觉可能会卡蹦程序 现在在考虑如何优化
能不能用俩canvas
一个把源数据画线,做成临时文件的图。。这个canvas通过绝对定位隐藏起来。。
一个把生成的图拿来移动显示
现在不是移动的问题 我感觉像是canvas绘制的太久 就会变卡