所以我做了一个测试SVG和Canvas渲染时间的网页。测试是针对不同的浏览器进行的。我认为Canvas会比SVG更好但是从我的测试中我看到Canvas有更大的对象和圆形对象的问题。我的测试结果在这里:
http://lezag2.linuxpl.info/wykresT2.html - 这是对于具有= 500个像素的
的50.000个矩形的重新分析http://lezag2.linuxpl.info/wykresT4.html - 这是50.000圈子的结果,r = 250像素
我使用简单的代码在页面上生成对象。 帆布:
var ctx = document.getElementById('canvas').getContext('2d');
for(var i=0;i<50000;i++){
ctx.beginPath();
var centreX = Math.random() * 1000;
var centreY = Math.random() * 1000;
var radius = 50;
var startAngle = 0 * Math.PI/180;
var endAngle = 360 * Math.PI/180;
ctx.arc(centreX,centreY,radius,startAngle,endAngle,false);
ctx.fillStyle = "rgb("+Math.floor(Math.random()*256)+","+ Math.floor(Math.random()*256)+","+ Math.floor(Math.random()*256)+")";;
ctx.fill();
ctx.closePath();
}
和SVG:
for (var i = 0; i < 50000; i++) {
var x = Math.random() * 1000,
y = Math.random() * 1000;
var circ = document.createElementNS(svgns, 'circle');
circ.setAttributeNS(null, 'cx', x);
circ.setAttributeNS(null, 'cy', y);
circ.setAttributeNS(null, 'r', 50);
circ.setAttributeNS(null, 'fill', '#'+Math.round(0xffffff * Math.random()).toString(16));
document.getElementById('svgOne').appendChild(circ);
}
我想知道为什么Canvas与SVG相比有这么糟糕的时期。我试图谷歌我的问题,但发现只有非常comlpex测试。有人可以解释一下为什么帆布有这么糟糕的时代吗?我也说得好 - 我的意思是渲染时间??
修改
我忘了展示我如何测量渲染时间。
befTime = (new Date()).getTime();
{
(drawing function)
}
var actTime = (new Date()).getTime();
var testTime = (actTime-befTime)/1000;
这就是为什么我通过说“渲染时间”来问我是不是说错了
答案 0 :(得分:3)
您无法从测试中推断svg比canvas更快或更慢,原因如下:
次要原因:
更重要的原因:
更重要的原因:
杀人原因:
Rq:您可以尝试使用一个简短的setInterval来测量svg绘制时间,并查看两次调用之间实际经过的次数而不是实际间隔:这是系统被卡住渲染的时间。
结论:您正在比较创建DOM对象的时间并将它们添加到文档中,而不是在不同步的画布上渲染圆圈的时间。没有结论可以从这些数字中得出结论。