Heim >Web-Frontend >js-Tutorial >Eine kurze Analyse des Caching-Mechanismus von jQuery_jquery
Als ich vor nicht allzu langer Zeit die Animationswarteschlange von jQuery untersuchte, stellte ich fest, dass das Caching-System von jQuery ebenfalls sehr leistungsfähig ist. Obwohl ich schon einiges damit zu tun hatte, habe ich es nie eingehend untersucht. Das Caching-System von jQuery ist bei externer Verwendung relativ einfach. Um beispielsweise bestimmte URL-Daten im Cache zu speichern, schreiben Sie einfach:
Es können nicht nur Zeichenfolgen gespeichert werden, der obige Wert kann auch beliebige Daten sein und Objekte, Arrays, Funktionen usw. können darin gespeichert werden. Es ist ganz einfach, diese Funktion zu implementieren. Deklarieren Sie ein globales Objekt zum Speichern von Daten und verwenden Sie dann die Datenmethode zum Speichern oder Zurückgeben von Daten:
return cacheData[key];
};
Wenn Sie das Caching-System von jQuery zum Speichern der Daten eines DOM-Elements verwenden, wird dem DOM-Element zunächst ein zufällig generiertes Attribut hinzugefügt. Dieses Attribut wird zum Speichern des Indexwerts für den Zugriff auf die zwischengespeicherten Daten verwendet, genau wie das DOM Das Element verfügt über einen offenen Schlüssel. Sie können den Cache-Safe jederzeit öffnen, solange Sie den Schlüssel haben. Die ursprünglich im DOM-Element gespeicherten Daten werden in den Cache übertragen, und das DOM-Element selbst muss nur ein einfaches Attribut speichern, sodass das Risiko von durch das DOM-Element verursachten Speicherverlusten minimiert werden kann. Das Folgende ist ein einfaches Caching-System, das ich geschrieben habe, um jQuery zu simulieren:
return cacheData[key];
}
else if( typeof key === "object" ){
var index,
thisCache;
if( !key [expando] ){
// Ein Attribut eines DOM-Elements hinzufügen
// Die Zufallszahl ist der Attributname und der Indexwert ist der Attributwert
index = key[expando] = uuid;
if( !thisCache[expando] ){
thisCache[expando] = {};
}
if( gambling // Daten im Cache-Objekt speichern
thisCache[expando][val] = data;
}
// Gibt die im DOM-Element gespeicherten Daten zurück
return thisCache[expando][val];
}
};
var removeData = function( key, val ){
if( typeof key === "string" ){
delete cacheData[key];
}
else if( typeof key = == "object" ){
if( !key[expando] ){
return;
// Prüfe, ob das Objekt leer ist
var isEmptyObject = function( obj ) {
var name;
for ( name in obj ) {
return false;
}
return true;
},
removeAttr = function(){
try{
// IE8 und Standardbrowser können delete direkt verwenden, um Attribute zu löschen
delete key[expando];
}
Catch (e) {
// IE6/IE7 verwenden Methode „removeAttribute“ zum Löschen von Attributen
key.removeAttribute(expando);
}
},
index = key[expando];
if( val ){
// Nur die angegebenen Daten löschen
delete cacheData[index][expando][val];
// Wenn es sich um ein leeres Objekt handelt, löschen Sie einfach alle Objekte
if( isEmptyObject( cacheData[index] [expando] ) ){
delete cacheData[index];
removeAttr();
}
}
else{
// Alle im Cache gespeicherten Daten für DOM-Elemente löschen
CacheData[index] löschen;
removeAttr();
}
}
};
Bemerkenswert an dem obigen Code ist, dass die Verwendung von „delete“ zum Löschen eines benutzerdefinierten Attributs in IE6/IE7 einen Fehler meldet. Es kann nur mit „removeAttribute“ gelöscht werden. Folgendes ist das Ergebnis des Aufrufs:
removeData( box );
Natürlich ist das Caching-System von jQuery komplizierter als meines, aber das Grundprinzip ist immer noch dasselbe. easyAnim wird dieses Caching-System in späteren Versionen einführen.