继上一贴 https://www.v2ex.com/t/830653#reply27,本来只是分享一下我的第一个小程序的喜悦,没想到关注的人还挺多的,同时也提出了一大推的问题。
问题比较严重的的就是“画布上面的东西多了之后,清除、撤销、换背景等操作会非常的慢”,然后我自己也找到了问题的原因所在,现在分享一下我的解决思路,供大家参考,如果有更好的方法,欢迎大佬们不吝指教:
切换背景慢:我将背景图层从 canvas 中分离了出来,在底部搞了一个view
,现在切换背景颜色的时候不会重新渲染 canvas ;
撤销慢:主要是我之前的处理方法不当,后面发现了 canvas 的上下文中其实已经提供了一个强大的方法ctx.getImageData
和 ctx.putImageData
,从方法名很容易就能看出,是生成图像数据相关的东西。然后我每次在一个动作完成之后touchend
,将当前画布上的内容保存起来,然后每次撤销的时候,取列表中上一步的ImageData
重新渲染在画布上。现在不管画布上面多复杂,基本上不会卡顿了。
不过在ctx.getImageData
的时候其实还有优化空间,步骤多了之后,占用内存可能会有点大,由于时间有限,也快过年了,只能等年后优化了。
再放上我的小程序码,欢迎大家体验,然后提出宝贵的意见
具体优化细节,等年后整理一下源码,给大家分享出来
现在还坚守在公司摸鱼的大佬们,提前祝大家新年快来!加薪!加薪!!加薪!!!最重要的是脱单😅😅😅😅
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.