Created
December 5, 2013 08:56
-
-
Save arestov/7802216 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var getComplexCalculations = function(some_data) | |
//Эта функция вызывается очень часто, соотствестенно каждый push({}) создаёт объект для сборщика мусора (который остановит выполнение всего приложения) | |
var result_array = []; | |
for (var i = 0; i < some_data.length; i++) { | |
result_array.push({ | |
state_name: getStateName(some_data[i]), //всегда строка | |
state_value: getStateValue(some_data[i]) //любой тип (null, object, number, string...) | |
}); | |
} | |
return result_array; | |
}; | |
//С этой функцией и её результатом я работаю так (совсем ничего особенного) | |
var result_array = getComplexCalculations(some_data); | |
for (var i = 0; i < result_array.length; i++) { | |
var cur = result_array[i]; | |
doStaff(cur.state_name, cur.state_value) | |
} | |
var getComplexCalculations2 = function() { | |
//Что бы не создавать объект каждый раз я переписал функцию так, что бы обходиться одним массивом: каждый нечётный элемент - это state_name, а каждый чётный - state_value | |
var result_array = []; | |
for (var i = 0; i < some_data.length; i++) { | |
result_array.push(getStateName(some_data[i]), getStateValue(some_data[i])); | |
} | |
return result_array; | |
}; | |
//С результатом я работаю так | |
var result_array = getComplexCalculations2(some_data); | |
for (var i = 0; i < result_array.length; i+=2) { | |
var cur = ; | |
doStaff(result_array[ i ], result_array[ i + 1 ]) | |
} | |
//Я знаю что V8 оптимизирует массивы в которых все элементы одного типа | |
//Есть ли отпимизации (или планируются) связанные с тем, что v8 понимает, что например каждый третий элемент массива - это строка? | |
//Имеют приведённые выше оптимизации смысл? Может быть можно чтото сделать лучше совершенно иначе | |
//Ещё у меня есть идея третьего варианта этой функции, где создаётся пара массивов (на каждое поле), таким образом как минимум один массив (где хранятся строки) будет оптимизирован | |
var getComplexCalculations3 = function() { | |
var states = []; | |
var values = []; | |
for (var i = 0; i < some_data.length; i++) { | |
states.push(getStateName(some_data[i])); | |
values.push(getStateValue(some_data[i])); | |
} | |
return [states, values]; | |
}; | |
//Получается 3 массива (3й - обёртка для возвращения результата) | |
//А работать с результатом нужно будет так | |
var result_wrap = getComplexCalculations3(some_data); | |
for (var i = 0; i < result_wrap[0].length; i++) { | |
doStaff(result_wrap[0][i], result_wrap[1][i]) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment