ixth,
он чушь несет несусветную, там перерисовка идет только один раз, после цикла, все браузеры все перерисовывают одинаково, иначе как юзер смог бы увидеть результаты поиска? Глупо было бы. |
Да, но "после цикла" раньше вызывалось при каждом нажатии на клавишу. Думаю, он про это.
|
Да, может и про это, и это тоже чушь. Браузер не может заранее знать, в какой момент будет нажата следующая клавиша, и будет ли нажата. Может быть там установлены таймауты минммальные, но это не принципиально. Визуально не видно никаких задержек, все выводится моментально.
|
ixth,
Проблема там не в выводе результатов, а в том, что во время выполнения цикла пользовательский ввод не может попасть в инпут, он ждет окончания цикла. |
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мс |
Проблема в выводе результатов
как следствие этой проблемы - пользовательский ввод ждет окончания вывода результатов. |
Каким образом map ведет к утечке памяти? И если придираться к мелочам, то почему ты так странно объявляешь функции?
|
MallSerg,
Возможно ты прав, извиняюсь что нагрубил, я в шоке. :) Я сгенерил массив в несколько тысяч строк, и поставил таймеры. Цикл выполняется 1-3 миллисекунды, основное время занимает отрисовка. Это если верить отладчикам. А я им не верю. Как такое может быть? Просто, видимо выполнение цикла не учитывается толком. Буду дальше эксперементировать. |
Цитата:
>> Цитата:
|
Цитата:
Но да, он медленнее. Т.к. у тебя критичное к скорости место, можешь заменить на for, ничего не имею против, просто мне было удобнее написать с мапом. Цитата:
Цитата:
|
| Часовой пояс GMT +3, время: 15:07. |