Javascript SVG与画布(Snap.SVG与FabricJS)
我做了一个速度测试来比较Snap.svg(svg)和FabricJS(CANVAS):Javascript SVG与画布(Snap.SVG与FabricJS),javascript,canvas,svg,fabricjs,snap.svg,Javascript,Canvas,Svg,Fabricjs,Snap.svg,我做了一个速度测试来比较Snap.svg(svg)和FabricJS(CANVAS): 函数dummy() 在Chrome中,SVG渲染时间为120毫秒,而CANVAS渲染时间为1100毫秒。SVG比CANVAS快9倍 Fabricjs.com页面上说Raphael需要225毫秒,Fabric需要97毫秒(解析:80,渲染:17) 我有一个印象(在读了fabricjs.com和之后),fabricjs和更一般的Canvas比SVG快 我的速度测试表明SVG比Canvas快得多(至少Snap.SV
函数dummy()
在Chrome中,SVG渲染时间为120毫秒,而CANVAS渲染时间为1100毫秒。SVG比CANVAS快9倍
Fabricjs.com页面上说Raphael需要225毫秒,Fabric需要97毫秒(解析:80,渲染:17)
我有一个印象(在读了fabricjs.com和之后),fabricjs和更一般的Canvas比SVG快
我的速度测试表明SVG比Canvas快得多(至少Snap.SVG似乎比FabricJS快得多)
为什么FabricJS在我的测试中这么慢?相比之下,我犯了一些错误,因为在我的速度测试中,SVG似乎比Canvas快,这让我感到惊讶
编辑:我的问题分为两个部分:为什么FabricJS中的渲染速度要慢得多,为什么拖动速度也慢得多?在我看来,你的基准测试被打破了,因为除了测量图形到画布之外,你还一次又一次地测量包含路径的巨大字符串的解析。将此代码从循环中分离出来,您将获得更可靠的结果 为画布库提供的度量是为绘图提供的,而不是为解析或其他预处理工作提供的。如果您像使用SVG一样使用画布,那么是的,它会变慢。它不打算像SVG那样使用。FabricJS提供了一种实现这一点的方法,但它不是最优的。一种解决方案是只解析一次路径,然后反复使用相同的路径,而不是每次都解析它 此外,给出的测量值可能是为了绘制画布,而不是为了与零件交互。正如您在评论中所说的,渲染可能会得到改进,但为什么拖动形状需要更长的时间呢?因为:
我希望我的回答对你有用:)这个问题的答案解释了为什么它如此缓慢。我没有找到原因。原因是什么?如何?你能提供修复方法吗?我的问题分为两部分:分离字符串解析可以缩短“渲染”时间,但你是否尝试过将一个形状拖到其他形状上?在FabricJS中速度明显较慢。我还不知道,为什么它这么慢。为什么解析应该分开?如果所有形状都不同,则必须考虑解析。我没有很快发现这么多不同的形状。谢谢。我有点奇怪:“因为:路径解析”。当拖动某个对象时,FabricJS真的会解析字符串吗?这只是一个假设。我不知道是这样的。第二点是站得住脚的。在SVG中,每个形状/路径都有一个DOM对象。在画布中,没有路径或形状的概念。您不能影响单个形状。