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, время: 17:56. |