оптимизация кода
Скажите пожалуйста, что лучше будет для быстродействия и экономии памяти, одна универсальная функция с множеством if или скажем три простые функции которые вместе решают туже задачу?
Например перебор ячеек таблицы от 0 до n и от n до 0. Можно написать две одинаковые функции asc и desc отличающии только циклом выборки for, а можно написать одну функцию. |
вот пример функций чтобы было понятно о чем я.
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, функции получаются почти одинаковые, мне это не очень нравится так как не охота засорять прототип объекта такими методами, может лучше писать универсально как в примере? |
Несомненно условный оператор внутри цикла снижает производительность. Если не хочется писать две почти одинаковые функции, то я бы сделал примерно так:
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 этом случае не вычитаем) |
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]); } } |
Спасибо, буду стремиться писать меньше условных переходов в цикле.
|
2 вариант мне понравился больше
|
Цитата:
|
Часовой пояс GMT +3, время: 18:59. |