我一直在尝试使用 drawImage 将大量 SVG 文件实例绘制到画布上。通过使用 SVG 作为源创建单个图像元素,然后为画布上的每个实例使用 drawImage,我希望即使有大量实例,我也可以非常快速地在画布中生成合成图像。
性能方面,这在 Firefox 中运行良好——我可以在大约 300 毫秒内绘制 60,000 个实例。但是在 Chrome 上它非常慢:16,000 个实例需要 5 秒以上。我在jsfiddle上放了一个版本的代码,它演示了 Chrome 上的问题。
我有一个我如何在下面调用 drawImage 的示例,其中画布上填充了尽可能多的大小 x 大小的图像。我读过一个建议,尝试使用第二个隐藏画布来缓冲所有实例,然后通过一次调用更新可见画布。但这并没有影响性能,单独的 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;