Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   оптимизация кода (https://javascript.ru/forum/misc/35894-optimizaciya-koda.html)

simple 26.02.2013 01:08

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

simple 26.02.2013 01:44

вот пример функций чтобы было понятно о чем я.
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, функции получаются почти одинаковые, мне это не очень нравится так как не охота засорять прототип объекта такими методами, может лучше писать универсально как в примере?

rgl 26.02.2013 09:56

Несомненно условный оператор внутри цикла снижает производительность. Если не хочется писать две почти одинаковые функции, то я бы сделал примерно так:
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 этом случае не вычитаем)

rgl 26.02.2013 10:13

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]);
  }
}

simple 26.02.2013 10:50

Спасибо, буду стремиться писать меньше условных переходов в цикле.

simple 26.02.2013 10:58

2 вариант мне понравился больше

рони 26.02.2013 11:37

Цитата:

Сообщение от rgl
start = arr.length

на всякий случай start = arr.length-1


Часовой пояс GMT +3, время: 18:59.