Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 21.11.2014, 19:24
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

Сообщение от klk.pma Посмотреть сообщение
krutoy, а этот скрипт должен быть только после всех инпутов или его можно размещать в подключаемый файл?
Вообще, я думаю, все скрипты работающие с контентом лучше размещать в конце body. А подключаемый ли он из внешнего файла, или инлайн -- это, вроде, не особо важно. Он инициализируется в нужное время, все равно.
Ответить с цитированием
  #12 (permalink)  
Старый 21.11.2014, 19:25
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 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 раз быстрее, намного приятнее и легко читается. Во вторых переменные нужно инициализировать, как можно меньше использовать регулярные выражения, особенно там где от них нет проку и т.д.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #13 (permalink)  
Старый 21.11.2014, 19:28
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от klk.pma
Кстати, первый раз увидел такой перебор цикла for(i in digits)
Он больной на голову, не используй такой перебор. В будущем будет for .. of ну а пока нужно использовать перебор по индексу.
Кстати что мешает применить скрипт к number типу? Я вот ща с мобилы - так мне клава числовая открылась. Я не могу туда букву ввести даже без скрипта.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #14 (permalink)  
Старый 21.11.2014, 19:31
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

devote,
ко-ко-ко. Над производительностью бьются мартышки. инженер пишет прототип и оптимизирует узкие места.
Ответить с цитированием
  #15 (permalink)  
Старый 21.11.2014, 19:48
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 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>

Другой, нижеотписавшийся "мастер" вообще не стоит внимания.
Ответить с цитированием
  #16 (permalink)  
Старый 21.11.2014, 19:50
Интересующийся
Отправить личное сообщение для klk.pma Посмотреть профиль Найти все сообщения от klk.pma
 
Регистрация: 30.06.2014
Сообщений: 23

Сообщение от danik.js Посмотреть сообщение
Он больной на голову, не используй такой перебор. В будущем будет for .. of ну а пока нужно использовать перебор по индексу.
Кстати что мешает применить скрипт к number типу? Я вот ща с мобилы - так мне клава числовая открылась. Я не могу туда букву ввести даже без скрипта.
Number не во всех браузерах работает
Ответить с цитированием
  #17 (permalink)  
Старый 21.11.2014, 19:52
Интересующийся
Отправить личное сообщение для klk.pma Посмотреть профиль Найти все сообщения от klk.pma
 
Регистрация: 30.06.2014
Сообщений: 23

Если представленный вариант неправильный, можете показать корректный вариант?
Ответить с цитированием
  #18 (permalink)  
Старый 21.11.2014, 19:55
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 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 в 20:00.
Ответить с цитированием
  #19 (permalink)  
Старый 21.11.2014, 20:33
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 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
у дебилов он действительно может быть медленным, но в целом -- это гон, см тест выше
А это тебе предупреждение от меня, еще одно оскорбление и пойдешь в самый долгий бан. Я не припоминаю что бы я тебя оскорбил, дык вот будь добр разговаривать адекватно.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #20 (permalink)  
Старый 21.11.2014, 20:47
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

devote,
Я извиняюсь за резкие слова, но то слово относилось не к тебе лично, а к абстрактному дебилу в вакууме, как-бы, так что не принимай на свой личный счет.

Что касаемо for-in, мифы о его медлительности, как мне кажется, рождены из-за его кривого использования. Он итеритует объект вместе со всей цепочкой прототипов, поэтому, если вовремя не выйти из цикла, он будет заниматься перебором бесполезных полей. Его смело можно применять, как правило, если место не суперузкое, только с умом.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пользовательская функция для графиков aleksey.danchin Общие вопросы Javascript 1 15.06.2014 12:22
AJAX функция для новых html-элементов broadcast77 AJAX и COMET 25 03.03.2014 12:01
поиск классов внутри тега yozuul jQuery 24 14.06.2013 21:00
как прописать условия для полей input и textarea Nailya Общие вопросы Javascript 12 06.06.2013 15:48
Функция onclick для созданных потомков Groonel Общие вопросы Javascript 6 24.04.2009 17:35