Должны ли тяжелые переменные выходить за пределы функций? - PullRequest
5 голосов
/ 15 января 2012

В настоящее время у меня есть функция, которая работает около 200 раз.

Функция выглядит следующим образом:

function GetB(av,bol){
var bxes=[
["11","12","13","21","22","23","31","32","33"],
["14","15","16","24","25","26","34","35","36"],
["17","18","19","27","28","29","37","38","39"],
["41","42","43","51","52","53","61","62","63"],
["44","45","46","54","55","56","64","65","66"],
["47","48","49","57","58","59","67","68","69"],
["71","72","73","81","82","83","91","92","93"],
["74","75","76","84","85","86","94","95","96"],
["77","78","79","87","88","89","97","98","99"]
];

//code
}

Моя первая проблема заключается в том, что этот массив замедляет все, потому что я думаюкаждый раз переписывает массив bxes (или что-то в этом роде)

Этот массив bxes никогда не изменяется, и я не против сделать его глобальным.

  • Нужно ли беспокоиться о переписывании?(или браузеры отслеживают, был ли он когда-либо изменен, и если это не так, он не будет переписывать его)

Ответы [ 2 ]

3 голосов
/ 15 января 2012

Простой тест показывает ответ.С функцией, объявленной в том виде, в каком вы ее написали, 5 000 000 вызовов занимают 12 739 секунд.При перемещении определения массива за пределы функции тот же цикл потребляет всего 0,169.

Помните, что это будет зависеть от используемого движка JavaScript - и поэтому используемого браузера.

3 голосов
/ 15 января 2012

Почему не вы переместите его за пределы функции? (Зачем рисковать, вызывая проблемы с производительностью?)

Это даже не обязательно должно быть «глобальным» - просто в родительской области действия функции - но и функция, и bxes, и другой код могут существовать в родительской функции или замыкании ...

(function(){
  var bxes = [...];
  window.GetB = function(av,bol){...};
})();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...