Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.02.2015, 20:16
Новичок на форуме
Отправить личное сообщение для polecat Посмотреть профиль Найти все сообщения от polecat
 
Регистрация: 19.02.2015
Сообщений: 8

оптимизация, как правильнее?
Здравствуйте.
Я новичок в javascript (да и вообще в программировании). Писал скрипт к своему проекту и обратил внимание, что листинг получается монструозным за счёт того, что я практически не использую переменных, а оперирую напрямую с элементами DOM.
Например:
if (document.getElementById(tested_fields[7]+string_number).value.substring((document.getElementById(tested_fields[7]+string_number).value.indexOf('\'',res_find)),(document.getElementById(tested_fields[7]+string_number).value.indexOf('\'',res_find)+2))=="''"){
  res_find=(document.getElementById(tested_fields[7]+string_number).value.indexOf('\'',res_find))+2;
} else {
  enum_flag=1;
  res_find=(document.getElementById(tested_fields[7]+string_number).value.indexOf('\'',res_find))+1;
}

Когда-то я слышал, что имеет смысл избегать, где это возможно, лишних переменных (экономить память) и как-то на автомате стараюсь без них обходиться
Меня внешний вид моего кода не напрягает совершенно и в принципе мне так удобно, но вдруг задумался, а не повлияет ли такой вид записи на скорость работы кода в худшую сторону?
Какой код будет работать быстрее, мой, или такой?:
var string1 = document.getElementById(tested_fields[7]+string_number).value;
if (string1.substring(string1.indexOf('\'',res_find),(string1.indexOf('\'',res_find)+2))=="''"){
  res_find=(string1.indexOf('\'',res_find))+2;
} else {
  enum_flag=1;
  res_find=(string1.indexOf('\'',res_find))+1;
}

И как вообще писать правильнее с точки зрения "культуры кода"?

Последний раз редактировалось polecat, 19.02.2015 в 20:21.
Ответить с цитированием
  #2 (permalink)  
Старый 19.02.2015, 21:26
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от polecat
имеет смысл избегать, где это возможно, лишних переменных (экономить память)
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #3 (permalink)  
Старый 19.02.2015, 21:31
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от polecat
культуры кода
Боюсь это понятие вообще не применимо к твоему коду
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #4 (permalink)  
Старый 19.02.2015, 21:32
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,071

Сообщение от melky
«Программы должны быть написаны так, чтобы их могли читать люди, и лишь иногда так, чтобы их могли выполнять машины»
Ответить с цитированием
  #5 (permalink)  
Старый 19.02.2015, 21:37
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Че хоть скрипт твой делать должен? Кавычки зачем-то считает?
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #6 (permalink)  
Старый 19.02.2015, 22:01
Аватар для Safort
Профессор
Отправить личное сообщение для Safort Посмотреть профиль Найти все сообщения от Safort
 
Регистрация: 23.12.2013
Сообщений: 1,856

polecat,
Цитата:
И как вообще писать правильнее с точки зрения "культуры кода"?
Второй вариант правильнее. Просто потому, что его гораздо удобнее читать.

Цитата:
а не повлияет ли такой вид записи на скорость работы кода в худшую сторону?
Да, будет хуже. В теории, ты постоянно заново получаешь доступ к DOM элементу, вместо того, чтобы просто запомнить его в переменной.
Ответить с цитированием
  #7 (permalink)  
Старый 20.02.2015, 06:02
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Вот код, делающий тоже самое (если я не ошибся):
var quote = '\'';
var string1 = document.getElementById(tested_fields[7]+string_number).value;
var quotePos = string1.indexOf(quote, res_find);
res_find = quotePos + 1;
if (string1[quotePos + 1] == quote){
  res_find += 1;
} else {
  enum_flag=1;
}

Можно еще регулярку использовать - код станет короче.

Твои косяки:
1) Почему tested_fields[7] а не 43 или 777? Магических чисел быть не должно.
2) Почему такое дибильное именование через подчеркивание? В js такой стиль не используют. Достаточно посмотреть на имена объектов из браузерного окружения чтобы понять это.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #8 (permalink)  
Старый 20.02.2015, 15:26
Новичок на форуме
Отправить личное сообщение для polecat Посмотреть профиль Найти все сообщения от polecat
 
Регистрация: 19.02.2015
Сообщений: 8

Сообщение от danik.js Посмотреть сообщение
Твои косяки:
1) Почему tested_fields[7] а не 43 или 777? Магических чисел быть не должно.
2) Почему такое дибильное именование через подчеркивание? В js такой стиль не используют. Достаточно посмотреть на имена объектов из браузерного окружения чтобы понять это.
Ох вы и резкий
Написал же, только учусь.
По пунктам:
1) Потому, что это маленький кусочек выдернутый из огромной процедуры с целью продемонстрировать пример "внешнего вида". Вообще там массив полей, которые я проверяю. Тут можно было бы и просто имя поля вставить, но выше мне нужно именно массив перебирать, а тут я просто использую элемент массива, потому, что мне так удобнее (всё равно он сформирован).
2) Потому, что мне так понятно назначение переменной. В учебнике читал, что нужно называть понятно и в одном стиле, остальное не важно - вот и соответствую. Где почитать как называть переменные, что-бы не вызывать припадков смеха у "бывалых"?
3) Этот кусочек ищет первую одинарную кавычку в строке, и смотрит что стоит за ней. Если вторая одинарная кавычка то...
Там дальше длинно
По поводу памяти - это мне рассказывали году так в 95м, при изучении паскаля. С тех пор я с программированием не сталкивался особо, а сейчас появилось желание поковыряться

2 Safort Спасибо. Это я и хотел узнать.

Последний раз редактировалось polecat, 20.02.2015 в 15:55.
Ответить с цитированием
  #9 (permalink)  
Старый 20.02.2015, 16:46
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от polecat
в одном стиле
Как бы в разных языках программирования есть свои общепринятые стайл-гайды, которым в том числе соответствует именование встроенных объектов (если они есть в окружении) и популярных библиотек. И если отойти от общепринятого стиля, то "одного стиля" ну никак не получится.
И смеялся я не над стилем, а над способом "экономии памяти"
Сообщение от polecat
По поводу памяти
Переменные действительно занимают память. Но ты забыл, что вызов функций занимает процессорное время. Вот только памяти завались, тем более ссылка занимает мизерный объем, а процессор надо беречь по возможности. Особенно учитывая "мобилизацию" аудитории.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #10 (permalink)  
Старый 20.02.2015, 17:03
Новичок на форуме
Отправить личное сообщение для polecat Посмотреть профиль Найти все сообщения от polecat
 
Регистрация: 19.02.2015
Сообщений: 8

А как лучше тогда делать, если я не только яваскрипт использую:
1 В разных средах использовать разные стили?
или
2 Везде использовать одинаковый стиль?

По поводу переменных, не то, что-бы я забыл, что вызов функций занимает процессорное время. Просто я не в курсе, что обращение к DOM модели, это вызов функции. Как то я яваскрипт начал изучать с конца - сначала понадобилась какая-то мелочь, я нашёл как это люди делают, пристроил у себя на странице, потом ещё понадобилось и.т.д.
Сейчас уже кое в чём разбираюсь (в нужных мне пределах) но до изучения базы руки так и не дошли.
Вот поэтому и возникают иногда такие вопросы.
Спасибо, что отвечаете
Да, первое представление о программировании я получил 20 лет назад в институте изучая турбопаскаль. и там нас сильно напрягали экономией памяти, а процессорное время для наших задач как-то не особо важно было

Последний раз редактировалось polecat, 20.02.2015 в 17:11.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как правильно реализовать такой функционал? Julian Общие вопросы Javascript 3 16.01.2015 12:34
Как сделать такую страницу mortido Элементы интерфейса 11 02.10.2014 07:20
Мотоциклисты есть? l-liava-l Оффтопик 13 04.07.2014 13:35
Решение проблемы кодировок для AJAX и PHP без iconv (cp1251 в AJAX) Serge Ageyev AJAX и COMET 10 24.04.2013 20:48
Как правильнее? Рикка (X)HTML/CSS 8 09.10.2007 09:30