Показать сообщение отдельно
  #25 (permalink)  
Старый 11.08.2014, 11:43
Профессор
Посмотреть профиль Найти все сообщения от newobject
 
Регистрация: 10.07.2014
Сообщений: 145

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мс

Последний раз редактировалось newobject, 11.08.2014 в 12:00.
Ответить с цитированием