jQuery und der liebe Cache

Zugriffe: 5554 starstarstarstarstarstarstarstarstarstar Bewertung:3,25 (4 Bewertungen) 24.04.2009

In einem aktuellen Projekt hat mich $.cache von jQuery schon so manches Mal zur Verzweiflung gebracht. Man hat sich gefreut, dass mit jQuery jetzt vieles einfacher und vor allem schneller geht. Als die Anwendung dann im Internet Explorer einige Zeit lief, folgte die Ernüchterung auf dem Fuße, was die Perfomance angeht. Letztlich war guter Rat gefragt und eine Lösung irgendwie nicht in Sicht.

Klar war, dass alle Events, die einmal gebunden wurden auch wieder mit unbind freigegeben werden müssen. Dennoch brachte es keine dauerhafte Verbesserung. Nach einiger Zeit des Debuggens kam mir das Objekt $.cache unter die Finger. Die Radikallösung

$.cache = {}

wird indes nicht empfohlen. Ich hab es dennoch ausprobiert - es ist in der Tat nicht empfehlenswert.
Doch wie geht es weiter? Die Lösung war so nah vor Augen. Man braucht nur die leeren Objekte im $.cache - Objekt zu löschen. Also habe ich mir eine kleine Methode hierzu geschrieben, die dann auch bitte gleich das unbind der Events mit erledigt.

var clear$Cache = function(selector, events)
{
 if (events) { $.each(function() { $(selector).unbind(events[i]); }) }
 for (var n in $.cache) {
        var noElements = true;
        var o = $.cache[n];
        for (var z in o) {
            noElements = false;
            break;
        }
        if (noElements) {
            delete $.cache[n];
        }
    }
};

Die Methode übernimmt dabei zwei Argumente - zum einen den Selektor, der für den unbind-Aufruf erforderlich ist und zum anderen ein String-Array von Eventnamen.
Im nächsten Schritt wird das $.cache-Objekt durchlaufen und immer wenn keine Eigenschaften zum Objekt vorhanden sind - es also leer ist - dann wird das betreffende Objekt gelöscht.

Statt des Aufrufes von

$("input, select").unbind("keyup").unbind("change");

nutze ich die o.g. Methode,

clear$Cache("input, select", ["keyup","change"]);

da hier das jQuery-Cache-Objekt bereinigt wird - zum Vorteil der Webanwendung.


Neuen Kommentar verfassen

Bestätigungscode