$.cache
's Größe bei Nennwert sagt nichts über Speicherverluste. Es könnte sehr klein sein und immer noch ein Speicherleck haben, oder es könnte sehr groß sein und keinen Speicherleck haben.
Wenn Sie wissen, dass Sie 10 Ereignis-Listener mit jQuery auf der Seite zu einer Zeit gebunden haben, und noch $.cache
Einträge für mehr hat, dann wissen Sie, dass Sie undicht sind.
Ein großer Speichersparmodus besteht darin, die Ereignisdelegierung zu verwenden, anstatt Event-Listener an jedes einzelne Element anzuhängen.
Sprich:
<ul>
<li></li>
<li></li>
<li></li>
</ul>
$("li").on("click", fn)
würde befestigen 3 individuelle Event-Handler (mehr, wenn Sie mehr li natürlich haben), während $("ul").on("click", "li", fn)
befestigen würde man nur unabhängig davon, wie viele li-Elemente, die Sie haben und noch haben das gleiche Ergebnis.
Beispiel Leck:
$("button").click(function() {
$("#target")[0].innerHTML = "";
$("<div>").appendTo($("#target")).click($.noop);
$("#log").text(Object.keys($.cache).length);
});
http://jsfiddle.net/SGZW4/1/
Grund dafür ist, dass .innerHTML verwendet, die nicht Teil von jQuery ist, so dass es aufzuräumen nicht tun kann.
Fix ist jQuery-Methode für das gleiche zu verwenden:
$("button").click(function() {
$("#target").html("");
$("<div>").appendTo($("#target")).click($.noop);
$("#log").text(Object.keys($.cache).length);
});
http://jsfiddle.net/SGZW4/2/
Es geht nicht darum, wie groß es ist, sondern wie es wächst im Laufe der Zeit. Wenn der Cache nicht begrenzt ist (d. H. Für immer zunimmt), haben Sie wahrscheinlich ein Speicherleck. –
jQuery ist wirklich Browser-kompatibel. Es bringt das IE-Problem mit sich, Elemente in allen Browsern richtig zu entsorgen. –
Sie würden hart gedrängt werden, moderne Gedächtnisfähigkeiten zu belasten, wenn Sie vernünftig sind. Es sei denn, Sie erstellen ein Speicherleck, das groß genug ist. Es gibt keinen magischen Speicher, alles hängt von der Hardware eines Benutzers ab. Interessieren Sie sich für Leute, die Computer aus den 90er Jahren benutzen? –