ixth,
Да, кстати, я там заметил, что ты в своем коде используешь map для массива, типа, декларативное рулит, да, но это еще дополнительные тормоза+утечки памяти, возможно. Не надо так делать. Я вот тут протестил немножко
test=function(f, i){
console.time(f.name)
while(i--){f()}
console.timeEnd(f.name)
}
mymap=function(arr, f){
var newArr=[]
for(var i=0; i<arr.length; i++){
newArr[i]=f(arr[i])
}
return newArr
}
mymappush=function(arr, f){
var newArr=[]
for(var i=0; i<arr.length; i++){
newArr.push(f(arr[i]))
}
return newArr
}
thismap=function(f){
var newArr=[]
for(var i=0; i<this.length; i++){
newArr[i]=f(this[i])
}
return newArr
}
thismappush=function(f){
var newArr=[]
for(var i=0; i<this.length; i++){
newArr.push(f(this[i]))
}
return newArr
}
arr=[0,1,2,3,4,5,6,7,8,9]
f=function(x){return x}
arr.thismap=thismap
arr.thismappush=thismappush
function tst_mymap(){
mymap(arr, f)
}
function tst_mymappush(){
mymappush(arr, f)
}
function tst_thismap(){
arr.thismap(f)
}
function tst_thismappush(){
arr.thismappush(f)
}
function tst_native_map(){
arr.map(f)
}
i=100000
test_=function(f){return test(f, i)}
test_(tst_mymap)
test_(tst_mymappush)
test_(tst_thismap)
test_(tst_thismappush)
test_(tst_native_map)
//tst_mymap: 77ms
//tst_mymappush: 38ms
//tst_thismap: 75ms
//tst_thismappush: 81ms
//tst_native_map: 301ms
Тестил только на ноде, но результат как бы намекает. Врядли оно хот где-то быстрей будет.
ЗЫ к моему удивлению, в старой опере действительно быстрей
Started: tst_mymap
tst_mymap: 7363ms (7362900µsec)
Started: tst_mymappush
tst_mymappush: 8298ms (8298206µsec)
Started: tst_thismap
tst_thismap: 6963ms (6963449µsec)
Started: tst_thismappush
tst_thismappush: 8201ms (8200867µsec)
Started: tst_native_map
tst_native_map: 5507ms (5506914µsec)
Но в хроме:
tst_mymap: 32.000ms
tst_mymappush: 29.000ms
tst_thismap: 31.000ms
tst_thismappush: 27.000ms
tst_native_map: 460.000ms
В фф
[11:55:18.280] tst_mymap: таймер запущен
[11:55:18.420] tst_mymap: 140мс
[11:55:18.420] tst_mymappush: таймер запущен
[11:55:18.562] tst_mymappush: 142мс
[11:55:18.562] tst_thismap: таймер запущен
[11:55:18.711] tst_thismap: 149мс
[11:55:18.712] tst_thismappush: таймер запущен
[11:55:18.872] tst_thismappush: 160мс
[11:55:18.873] tst_native_map: таймер запущен
[11:55:19.166] tst_native_map: 293мс