2012-01-15 11 views
5

Attualmente ho una funzione che viene eseguita circa 200 volte.Le variabili pesanti devono andare al di fuori delle funzioni?

Il look funzione come questa:

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 
} 

La mia prima preoccupazione è che questo array sta rallentando tutto perché penso che sta riscrivendo ogni volta che la matrice bxes (o qualcosa di simile)

Questo L'array bxes non viene mai modificato e non mi dispiacerebbe renderlo globale.

  • Devo preoccuparmi per la riscrittura? (O fanno i browser tengono pista se è stato mai modificato, e se non fosse che non riscriverà esso)
+0

possibile duplicato di [Che cos'è la garbage collection JavaScript?] (Http://stackoverflow.com/questions/864516/what-is-javascript-garbage-collection) –

risposta

3

Perché non sarebbe lo si sposta al di fuori della funzione? (Perché rischiano di causare un problema di prestazioni?)

Non necessariamente dovrebbe essere "globale" - solo in un ambito genitore della funzione - ma sia la funzione e bxes che altri codici potrebbero esistere in un genitore funzione o chiusura ...

(function(){ 
    var bxes = [...]; 
    window.GetB = function(av,bol){...}; 
})(); 
+0

Ricordo di aver letto una volta queste funzioni di auto-chiamata. Solo una domanda, il mio codice onload/pronto dovrebbe essere fuori o dentro o fuori? – mithril333221

+0

Non ha importanza - ma inserisco tutto se non lo si ha già in una funzione di chiusura o genitore - nel tentativo di [prevenire l'inquinamento da spazio dei nomi globale] (http://blogger.ziesemer.com /2007/10/respecting-javascript-global-namespace.html). (La tua funzione onload/pronto potrebbe già agire come chiusura.) – ziesemer

3

Un semplice punto di riferimento mostra la risposta. Con la funzione dichiarata mentre lo hai scritto, 5.000.000 di chiamate impiegano 12.739 secondi. Con la definizione dell'array spostata all'esterno della funzione, lo stesso ciclo consuma solo 0,169.

Ricorda che questo può variare in base al motore JavaScript, e quindi al browser, in uso.

Problemi correlati