1.canvas 和dom在绘制方面的区别(驻留模式和快速模式)。
dom采用的是驻留模式,所谓驻留模式可以简单理解为,将一系列的简单(因而dom的布局)的api(html, css, js)等转化为存储在内存中的复杂的模型,这个模型指导绘图指令进行绘制,程序员需要做的事情很少,不必去关心具体实现,渲染的细节、刷新频率等。由于绘图模型存储在内存中,使用DOM元素时,浏览器需要照顾大量细节,也需要大量内存去支撑它实现它所具备的功能。当使用的DOM元素越多,对内存的消耗也就越大,性能越差。浏览器会对渲染过程做优化,但是不一定是程序员想要的结果。
canvas采用快速模式,程序员需要使用API直接调用绘图指令,并且需要关心绘图模型,刷新频率等。但是由于直接可以操作绘图指令,因此快速模式很快速,并且灵活,但是相对于驻留模式需要关注的更多。展示图像越大,渲染速度越慢。canvas渲染速度和渲染的像素数量成正比。如果代码处理不够得当,渲染较大区域就会很慢。并且canvas在操作方面比dom要差,只能给整个dom添加事件,并且只能通过脚本来操作。适合像素处理,动态渲染和大数据量,小面积的绘制。canvas绘制的图形都是一个一个像素点构成的。
2 canvas和svg的区别
SVG是一套独立的矢量图形语言,相比canvas 更方便做动态交互,因为svg是基于矢量的,因此放大缩小不会产生锯齿或者模糊,适合用来做高保真的图。与canvas相反,svg可以使用脚本和css来控制,适合少数量,大面积的图形绘制。相对于canvas, svg的技术更加成熟。
canvas性能优化
- 绘制的图形的数量和大小会影响canvas的性能
- 图形数量过多,但是只刷新部分 可以使用局部渲染
- 逻辑层和背景图层分离 可以使用分层渲染
- 某些长时间的逻辑影响主线程的, 可以使用离屏渲染 和webworker 来解决问题