Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.02.2013, 01:08
Аватар для simple
Профессор
Отправить личное сообщение для simple Посмотреть профиль Найти все сообщения от simple
 
Регистрация: 23.09.2010
Сообщений: 247

оптимизация кода
Скажите пожалуйста, что лучше будет для быстродействия и экономии памяти, одна универсальная функция с множеством if или скажем три простые функции которые вместе решают туже задачу?
Например перебор ячеек таблицы от 0 до n и от n до 0. Можно написать две одинаковые функции asc и desc отличающии только циклом выборки for, а можно написать одну функцию.

Последний раз редактировалось simple, 26.02.2013 в 01:17.
Ответить с цитированием
  #2 (permalink)  
Старый 26.02.2013, 01:44
Аватар для simple
Профессор
Отправить личное сообщение для simple Посмотреть профиль Найти все сообщения от simple
 
Регистрация: 23.09.2010
Сообщений: 247

вот пример функций чтобы было понятно о чем я.
function example(arr, type) {
  var index, lenght = arr.lenght - 1, x;
  for (x = 0; x <= lenght; x ++) {
    index = type == 'asc' ? x : lenght - x; 
   alert(arr[index]);
};

это упрощенная универсальная функция для прохода массива, просто в коде который я пишу сплошь и рядом появляется нужда таких вот парных операций типо asc desc, функции получаются почти одинаковые, мне это не очень нравится так как не охота засорять прототип объекта такими методами, может лучше писать универсально как в примере?
Ответить с цитированием
  #3 (permalink)  
Старый 26.02.2013, 09:56
Аватар для rgl
rgl rgl вне форума
Профессор
Отправить личное сообщение для rgl Посмотреть профиль Найти все сообщения от rgl
 
Регистрация: 28.02.2011
Сообщений: 349

Несомненно условный оператор внутри цикла снижает производительность. Если не хочется писать две почти одинаковые функции, то я бы сделал примерно так:
if( type == 'asc' ) {
for (x = 0; x <= lenght; x ++) {
....................
} else {
for (x = lenght; x >= 0; x --) {
.................

Это некий компромисс, дублирование кода сохраняется.

Другой вариант, без дублирования:
if( type == 'asc' ) {
var start = 0, end =length, step = 1;
} else {
start = length, end = -1, step = -1;
}
for (x = start; x != end; x += step ) {

(Единицу из length этом случае не вычитаем)
Ответить с цитированием
  #4 (permalink)  
Старый 26.02.2013, 10:13
Аватар для rgl
rgl rgl вне форума
Профессор
Отправить личное сообщение для rgl Посмотреть профиль Найти все сообщения от rgl
 
Регистрация: 28.02.2011
Сообщений: 349

function example(arr, type) {
  if( type == 'asc' ) {
    var start = 0, end = arr.length, step = 1;
  } else {
    start = arr.length; end = -1; step = -1;
  }
  for (var x = start; x != end; x += step ) {
    alert(arr[x]);
  }
}
Ответить с цитированием
  #5 (permalink)  
Старый 26.02.2013, 10:50
Аватар для simple
Профессор
Отправить личное сообщение для simple Посмотреть профиль Найти все сообщения от simple
 
Регистрация: 23.09.2010
Сообщений: 247

Спасибо, буду стремиться писать меньше условных переходов в цикле.
Ответить с цитированием
  #6 (permalink)  
Старый 26.02.2013, 10:58
Аватар для simple
Профессор
Отправить личное сообщение для simple Посмотреть профиль Найти все сообщения от simple
 
Регистрация: 23.09.2010
Сообщений: 247

2 вариант мне понравился больше
Ответить с цитированием
  #7 (permalink)  
Старый 26.02.2013, 11:37
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

Сообщение от rgl
start = arr.length
на всякий случай start = arr.length-1
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оптимизация кода Prizrak177 Общие вопросы Javascript 0 15.02.2011 16:36
Оптимизация кода mycoding Общие вопросы Javascript 6 21.04.2010 10:42
Оптимизация кода Tohin jQuery 7 11.07.2009 00:55
Помогите пожалуйста. Оптимизация кода. touch_the_sky Элементы интерфейса 21 18.06.2009 19:53
Помогите пожалуйста. Оптимизация кода. touch_the_sky Events/DOM/Window 0 17.06.2009 14:52