Цитата:
|
Цитата:
Памятка! JavaScript хороший и динамичный язык, многое может делать разными вариантами в этом есть и плюсы и минусы. А минусы в том, что каждый день большая часть квалифицированных разработчиков бьются над производительностью кода. А подобные конструкции: Цитата:
for(var index = digits.length; index--;) { digits[index].oninput=filter; }как минимум будет работать в 100 раз быстрее, намного приятнее и легко читается. Во вторых переменные нужно инициализировать, как можно меньше использовать регулярные выражения, особенно там где от них нет проку и т.д. |
Цитата:
Кстати что мешает применить скрипт к number типу? Я вот ща с мобилы - так мне клава числовая открылась. Я не могу туда букву ввести даже без скрипта. |
devote,
ко-ко-ко. Над производительностью бьются мартышки. инженер пишет прототип и оптимизирует узкие места. |
Цитата:
<!DOCTYPE HTML> <html> <head><meta charset="windows-1251" /> </head> <body> <input class="digit" type="text" maxlength="8" name="ot" value=""> <input class="digit" type="text" maxlength="8" name="do" value=""> <script> get=function(){ var el=document.createElement("input") el.setAttribute("class", "digit") document.body.appendChild(el) } count=1000 while(count--) get() digits=document.getElementsByClassName("digit") func1=function(){alert(1)} func2=function(){alert(2)} console.time("for in") for(i in digits){if(/\d+/.test(i)) digits[i].onkeyup=func1} console.timeEnd("for in") console.time("for") for(var index = digits.length; index--;) { digits[index].oninput=func2; } console.timeEnd("for") //FF: //for in: timer started start_page.html:22 //for in: 0ms start_page.html:24 //for: timer started start_page.html:26 //for: 16ms </script> </body> </html> Другой, нижеотписавшийся "мастер" вообще не стоит внимания. |
Цитата:
|
Если представленный вариант неправильный, можете показать корректный вариант?
|
klk.pma,
Да не, они просто домохались до for in, якобы, он медленный (у дебилов он действительно может быть медленным, но в целом -- это гон, см тест выше), замени на for, если хочешь, и все. <!DOCTYPE HTML> <html> <head><meta charset="windows-1251" /> </head> <body> <input class="digit" type="text" maxlength="8" name="ot" value=""> <input class="digit" type="text" maxlength="8" name="do" value=""> <script> digits=document.getElementsByClassName("digit") filter=function () { if(/\D+/g.test(this.value)) this.value=this.value.replace(/\D+/g, "") } //for(i in digits){if(/\d+/.test(i)) digits[i].oninput=filter} for(var i = digits.length; i--;) { digits[i].oninput=filter; } </script> </body> </html> |
krutoy, я не знаю что у тебя за ФФ такой, который за никакое время умудряется выполнить код, но у меня результаты иные. Конечно про 100 раз я говорил образно, но как минимум в 2-4 раза точно быстрее..
Chrome: for in: 4.000ms for: 1.000ms IE 11: for in: 9.8345 мс for: 5.8308 мс FF: for in: таймер запущен showhtml:21 for in: 5.17мс showhtml:23 for: таймер запущен showhtml:25 for: 2.53мс Цитата:
|
devote,
Я извиняюсь за резкие слова, но то слово относилось не к тебе лично, а к абстрактному дебилу в вакууме, как-бы, так что не принимай на свой личный счет. Что касаемо for-in, мифы о его медлительности, как мне кажется, рождены из-за его кривого использования. Он итеритует объект вместе со всей цепочкой прототипов, поэтому, если вовремя не выйти из цикла, он будет заниматься перебором бесполезных полей. Его смело можно применять, как правило, если место не суперузкое, только с умом. |
Часовой пояс GMT +3, время: 13:59. |