Javascript HTML画布性能-导入图像或绘制画布

Javascript HTML画布性能-导入图像或绘制画布,javascript,html,canvas,Javascript,Html,Canvas,对于这种复杂/简单的图像,创建PNG并导入画布还是在画布上绘制路径并填充更好 我认为每种浏览器的性能都会有所不同,最好编写一个快速的基准测试以及绘制每种类型的1000个所需的时间 也就是说,就编程的易用性而言,如果您已经有了PNG,为什么不按原样使用它们呢。我想每个浏览器的性能都会有所不同,最好是编写一个快速的基准测试,以及绘制每种类型的1000个所需的时间 也就是说,就编程的易用性而言,如果你已经有了PNG,为什么不按原样使用它们呢。对于画布,一般来说,从PNG/内存画布中绘制几乎总是比构建和

对于这种复杂/简单的图像,创建PNG并导入画布还是在画布上绘制路径并填充更好


我认为每种浏览器的性能都会有所不同,最好编写一个快速的基准测试以及绘制每种类型的1000个所需的时间


也就是说,就编程的易用性而言,如果您已经有了PNG,为什么不按原样使用它们呢。

我想每个浏览器的性能都会有所不同,最好是编写一个快速的基准测试,以及绘制每种类型的1000个所需的时间


也就是说,就编程的易用性而言,如果你已经有了PNG,为什么不按原样使用它们呢。

对于画布,一般来说,从PNG/内存画布中绘制几乎总是比构建和绘制路径更好。(见脚注)我们这里讨论的是10的系数。对于简单的东西

特别是如果你要一次又一次地画这些物体,每秒60次

尤其是当

对于复杂的画布生成的形状,一些注重性能的人已经开始在内存画布上预渲染它们,然后在画布之间绘制(使用drawImage),而不是每次重新创建路径。在很多情况下,这样做是值得的,但当然,没有什么能比分析和调整您自己的具体情况更好

我不想偏离正轨,但我想提醒你,在你(几乎)完成Canvas应用程序之前,你可能不应该担心这类事情

“我们应该忘记小效率,比如说97%的时间:过早优化是万恶之源”—Knuth

需要注意的一件大事是,对于许多应用程序来说,绘制这些按钮的性能甚至可能无关紧要(或者说没有明显的区别),在您完成Canvas应用程序的第一次迭代并开始“polish,polish,polish”之前,您可能根本不想担心哪种方式更快更新



有些人可能想知道动态渲染路径什么时候更好,这对大多数人来说可能是显而易见的,但如果不是这样,我会提到它。当然,有时会出现动态路径渲染的情况:交互式路径,例如从路径生成的绘图程序和动画中的路径,其中下一帧不是另一个静止图像,而是路径的添加。这些和更多的地方——你想用每一帧更新路径本身的任何地方——都是你想保留路径的地方,而不是试图预渲染任何东西。

对于画布,一般来说,从PNG/内存画布绘制几乎总是比构建和绘制路径更好。(见脚注)我们这里说的是10倍。对于简单的东西

特别是如果你要一次又一次地画这些物体,每秒60次

尤其是当

对于复杂的画布生成的形状,一些注重性能的人已经开始在内存画布上预渲染它们,然后在画布之间绘制(使用drawImage),而不是每次重新创建路径。在很多情况下,这样做是值得的,但当然,没有什么能比分析和调整您自己的具体情况更好

我不想偏离正轨,但我想提醒你,在你(几乎)完成Canvas应用程序之前,你可能不应该担心这类事情

“我们应该忘记小效率,比如说97%的时间:过早优化是万恶之源”—Knuth

需要注意的一件大事是,对于许多应用程序来说,绘制这些按钮的性能甚至可能无关紧要(或者说没有明显的区别),在您完成Canvas应用程序的第一次迭代并开始“polish,polish,polish”之前,您可能根本不想担心哪种方式更快更新



有些人可能想知道动态渲染路径什么时候更好,这对大多数人来说可能是显而易见的,但如果不是这样,我会提到它。当然,有时会出现动态路径渲染的情况:交互式路径,例如从路径生成的绘图程序和动画中的路径,其中下一帧不是另一个静止图像,而是路径的添加。这些和更多的地方——您希望在每个帧中更新路径本身的任何地方——都是您希望保留路径而不尝试预渲染任何内容的地方。

正确,绘制png通常比创建路径并在画布上绘制路径更快,尤其是当涉及到凹面形状时。更快的方法是创建图像的模式,并将其用作rect上的fillstyle:var pattern=ctx.createPattern(img,“no repeat”)//只执行一次ctx.translate(x,y)//到绘制按钮ctx.fillStyel=图案ctx.fillRect(0,0,img.宽度,img.高度)的位置;[编辑:意外地按enter键提前,添加了其余文本]正确的,绘制png通常比创建路径并在画布上绘制路径更快,尤其是当涉及到凹面形状时。更快的方法是创建图像的模式,并将其用作rect上的fillstyle:var pattern=ctx.createPattern(img,“no repeat”)//只执行一次ctx.translate(x,y)//到绘制按钮ctx.fillStyel=图案ctx.fillRect(0,0,img.宽度,img.高度)的位置;[编辑:意外地按enter键提前,添加了其余文本]