我一直在尝试使用drawImage将大量SVG文件的实例绘制到画布上。通过使用SVG作为源创建单个图像元素,然后在画布上使用drawImage对每个实例进行绘制,我希望即使有大量实例也能在画布上非常快地生成复合图像。
从性能上来看,在Firefox中,这种方法效果很好 - 我可以在约300ms内绘制60000个实例。但是在Chrome上,它非常缓慢:16000个实例需要超过5秒钟。我在jsfiddle上放了一个代码版本,可以演示Chrome上的问题。
下面是我如何调用drawImage的示例,其中画布填充了尽可能多的大小为size x size的图像。我曾经阅读过一条建议,尝试使用第二个隐藏画布来缓冲所有实例,然后使用一个调用更新可见画布。但那并没有影响性能,各个drawImage调用仍然似乎拖慢了整个过程。
对于出了什么问题以及如何解决的任何想法吗?
svgImg = new Image;
can.width = 1800; can.height = 900;
svgImg.onload = function () {
if (internalSize == size)
return;
internalSize = size;
var timeBefore = new Date().getTime();
var tot = 0;
var canWidth = can.width;
var canHeight = can.height;
for (var x = 0; x < canWidth; x += size) {
for (var y = 0; y < canHeight; y += size) {
ctx.drawImage(svgImg, x, y, size, size);
tot++;
}
}
document.getElementById('count').innerHTML = "Total Count: " + tot;
var timeAfter = new Date().getTime();
};
svgImg.src = "http://www.w3.org/Icons/SVG/svg-logo.svg";
svgImg.width = size;
svgImg.height = size;