Terminologia - Cache (Javascript)

3

Ho visto un paio di video su JavaScript in cui il presentatore ha menzionato "il caching" di una variabile, ma non li ho visti fare nulla nel codice che avrebbe "nascosto" oltre i normali compiti. Quando penso alla cache, penso a qualcosa memorizzato nella memoria locale, nel qual caso non tutte le variabili JavaScript sono memorizzate nella cache per definizione.

Quando metti in cache una variabile in JavaScript, cosa stai "facendo" ad essa?

EDIT: Ho sentito il termine in diversi ma l'unico che mi viene in mente è Scrivere JavaScript modulare - Tutorial . Che ho appena visto la scorsa notte. Non l'ho postato perché devi pagare per vedere e odio sentirmi simpatico Sto collegando un servizio a pagamento su StackExchange.

    
posta Ominus 23.02.2012 - 23:47
fonte

2 risposte

5

Da questo tutorial su javascript efficiente:

One of the best kept secrets to boosting script performance is to cache your objects. Often times, your script will repeatedly access a certain object, as in the following demonstration:

<script type="text/javascript">
for (i=0;i<document.images.length;i++)
document.images[i].src="blank.gif"
</script>

In the above, the object "document.images" is what's accessed multiple times. The code to realizing it is inefficient, since the browser must dynamically look up "document.images" twice during each loop (once to see if i<document.images, and the other, to access and change the image's src). If you have 10 images on the page, for example, that's 20 calls to the Images object right there. Excessive calls to JavaScript objects can wear down the browser, not to mention your computer's memory.

The term "cache your object" means storing a repeatedly access object inside a user defined variable, and using that variable instead in subsequent references to the object. The performance improvement can be significant. Here's a modified version of the initial script using object caching:

<script type="text/javascript">
var theimages=document.images
for (i=0;i<theimages.length;i++)
theimages[i].src="blank.gif"
</script>

Not only is the number of times document.images[] is referenced cut in half with the above, but for each time it is referenced, the browser doesn't have to go through document.images first, but goes straight to its containing array.

Remember to use object caching when calling highly nested DHTML objects, like document.all.myobject, or document.layers.firstlayer etc.

e

some JavaScript objects are less forgiving on the browser than others. While recognizing exactly which isn't easy (and isn't the goal here), just becoming aware of this fact is important.

Take, for example, these two properties:

-object.innerText //IE only
-object.innerHTML

Did you know that the second property demands multiple times the system resources to call than the first? If all you're changing is the textual content of a <div> or <span> and in IE only, innerText would definitely be the more efficient choice. Another example are the CSS properties "display" and "visibility"; the former is significantly more expensive than the later.

Con la memorizzazione nella cache degli oggetti JavaScript, il numero di ricerche è ridotto, poiché il riferimento all'oggetto è contenuto all'interno della variabile, migliorando potenzialmente le prestazioni e l'utilizzo della memoria.

    
risposta data 23.02.2012 - 23:59
fonte
2

Le risposte qui possono aiutarti a capire quali tipi di riferimenti ai tuoi dati vengono raccolti che punto, con una discussione più dettagliata qui e altrove sul web.

Quando stai cercando di mantenere i dati nella memoria locale in javascript, ti consigliamo di assicurarti di memorizzare un riferimento che rimanga in ambito per tutto il tempo necessario. Ciò richiederà che tu faccia qualche incarico a un certo punto - a volte usando le variabili locali (es .: var x = valore memorizzato nella cache), tuttavia, più probabilmente, vorrai posizionare le cose su oggetti più longevi, cioè:

jQuery.extend(myObject, {
   dog_cacher: []
}

...

myObject.dog_cacher = ["brown dog", "spotted dog"]
    
risposta data 24.02.2012 - 00:03
fonte

Leggi altre domande sui tag