我正在编写一个函数,将图像逐个像素地绘制到画布元素上。我注意到有一点,该函数的处理时间突然比以前更长 - 特别是从 338x338 像素画布到 339x339 像素画布。
将类似的外观功能放入 jsfiddle,我得到相同的结果。处理 338x338 数组的 while 循环大约需要。6-7 秒,而 339x339 的数组大约需要。24-25 秒。
这发生在 Chrome 上。在 Firefox 中,两者都需要大约。16 秒。
这是小提琴:http: //jsfiddle.net/8pb89/5/
代码如下所示:
var ary1 = [];
var ary2 = [];
var mapData = {};
var colorMatrix = {};
for (var i = 0; i < (338 * 338); i++) {
ary1.push([i, i + 2]);
}
for (var i = 0; i < (339 * 339); i++) {
ary2.push([i, i + 2]);
}
//Light operation
function test(i, j) {
return Math.floor((i * j + i + j) / j);
}
//Heavy operation on objects
function calcTest(ary){
var point = ary.splice(0, 1);
var i = point[0];
var j = point[1];
if (!mapData[i]) {
mapData[i] = [];
}
if (!mapData[i][j]) {
mapData[i][j] = [];
}
mapData[i][j]["one"] = test(i, j);
mapData[i][j]["two"] = test(i, j);
colorMatrix[mapData[i][j]["two"]] = mapData[i][j]["one"];
}
var len = ary1.length;
var start = new Date().getTime();
while (len--) {
calcTest(ary1);
}
var end = new Date().getTime();
var time = end - start;
alert('Execution for 338x338: ' + time);
var len2 = ary2.length;
obj = {};
obj2 = {};
start = new Date().getTime();
while (len2--) {
calcTest(ary2);
}
end = new Date().getTime();
time = end - start;
alert('Execution for 339x339: ' + time);
这是 Chrome 上的 javascript 的内存问题,还是我对对象做错了什么?有没有办法避免这种更高的处理时间?