Skip to content

Instantly share code, notes, and snippets.

@arestov
Created December 5, 2013 08:56
Show Gist options
  • Save arestov/7802216 to your computer and use it in GitHub Desktop.
Save arestov/7802216 to your computer and use it in GitHub Desktop.
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