
21.11.2014, 20:24
|
Профессор
|
|
Регистрация: 09.11.2014
Сообщений: 610
|
|
Сообщение от klk.pma
|
krutoy, а этот скрипт должен быть только после всех инпутов или его можно размещать в подключаемый файл?
|
Вообще, я думаю, все скрипты работающие с контентом лучше размещать в конце body. А подключаемый ли он из внешнего файла, или инлайн -- это, вроде, не особо важно. Он инициализируется в нужное время, все равно.
|
|

21.11.2014, 20:25
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
Сообщение от klk.pma
|
первый раз увидел такой перебор цикла for(i in digits)
|
Увидели, а теперь забудьте... Это очень плохая практика перебирать коллекции таким образом. А перед тем как перенять опыт, подумайте, может не зря этот человек krutoy, имеет в карме сплошной минус. А я поясню, ему еще самому многому надо поучиться перед тем как давать советы другим.
Памятка!
JavaScript хороший и динамичный язык, многое может делать разными вариантами в этом есть и плюсы и минусы. А минусы в том, что каждый день большая часть квалифицированных разработчиков бьются над производительностью кода. А подобные конструкции:
Сообщение от krutoy
|
for(i in digits){if(/\d+/.test(i)) digits[i].oninput=filter}
|
не ускоряют процесс а лишь затормаживают, во вторых этот подход сложно читаемый. Например вот этот код:
for(var index = digits.length; index--;) {
digits[index].oninput=filter;
}
как минимум будет работать в 100 раз быстрее, намного приятнее и легко читается. Во вторых переменные нужно инициализировать, как можно меньше использовать регулярные выражения, особенно там где от них нет проку и т.д.
|
|

21.11.2014, 20:28
|
 |
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Сообщение от klk.pma
|
Кстати, первый раз увидел такой перебор цикла for(i in digits)
|
Он больной на голову, не используй такой перебор. В будущем будет for .. of ну а пока нужно использовать перебор по индексу.
Кстати что мешает применить скрипт к number типу? Я вот ща с мобилы - так мне клава числовая открылась. Я не могу туда букву ввести даже без скрипта.
__________________
В личку только с интересными предложениями
|
|

21.11.2014, 20:31
|
Профессор
|
|
Регистрация: 09.11.2014
Сообщений: 610
|
|
devote,
ко-ко-ко. Над производительностью бьются мартышки. инженер пишет прототип и оптимизирует узкие места.
|
|

21.11.2014, 20:48
|
Профессор
|
|
Регистрация: 09.11.2014
Сообщений: 610
|
|
Сообщение от devote
|
как минимум будет работать в 100 раз быстрее
|
А заодно я солью тебя в говнецо, раз уж ты высунулся
<!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>
Другой, нижеотписавшийся "мастер" вообще не стоит внимания.
|
|

21.11.2014, 20:50
|
Интересующийся
|
|
Регистрация: 30.06.2014
Сообщений: 23
|
|
Сообщение от danik.js
|
Он больной на голову, не используй такой перебор. В будущем будет for .. of ну а пока нужно использовать перебор по индексу.
Кстати что мешает применить скрипт к number типу? Я вот ща с мобилы - так мне клава числовая открылась. Я не могу туда букву ввести даже без скрипта.
|
Number не во всех браузерах работает
|
|

21.11.2014, 20:52
|
Интересующийся
|
|
Регистрация: 30.06.2014
Сообщений: 23
|
|
Если представленный вариант неправильный, можете показать корректный вариант?
|
|

21.11.2014, 20:55
|
Профессор
|
|
Регистрация: 09.11.2014
Сообщений: 610
|
|
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, 21.11.2014 в 21:00.
|
|

21.11.2014, 21:33
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
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мс
Сообщение от krutoy
|
у дебилов он действительно может быть медленным, но в целом -- это гон, см тест выше
|
А это тебе предупреждение от меня, еще одно оскорбление и пойдешь в самый долгий бан. Я не припоминаю что бы я тебя оскорбил, дык вот будь добр разговаривать адекватно.
|
|

21.11.2014, 21:47
|
Профессор
|
|
Регистрация: 09.11.2014
Сообщений: 610
|
|
devote,
Я извиняюсь за резкие слова, но то слово относилось не к тебе лично, а к абстрактному дебилу в вакууме, как-бы, так что не принимай на свой личный счет.
Что касаемо for-in, мифы о его медлительности, как мне кажется, рождены из-за его кривого использования. Он итеритует объект вместе со всей цепочкой прототипов, поэтому, если вовремя не выйти из цикла, он будет заниматься перебором бесполезных полей. Его смело можно применять, как правило, если место не суперузкое, только с умом.
|
|
|
|