it-swarm.com.de

Fehler bei der Behandlung von "Out of Memory Exception" im Browser?

Ich debugge eine Javascript/html5-Webanwendung, die viel Speicherplatz benötigt. Gelegentlich erhalte ich eine Fehlermeldung im Konsolenfenster 

"uncaught exception: out of memory".  

Gibt es eine Möglichkeit, diesen Fehler in der App elegant zu behandeln?

Letztendlich muss ich Teile davon neu schreiben, um zu verhindern, dass dies überhaupt erst geschieht.

19
user547794

Sie sollten die Größe Ihres localStorage berechnen, Window.localStorage ist voll

als Lösung soll man versuchen, etwas hinzuzufügen

var localStorageSpace = function(){
    var allStrings = '';
    for(var key in window.localStorage){
        if(window.localStorage.hasOwnProperty(key)){
            allStrings += window.localStorage[key];
        }
    }
    return allStrings ? 3 + ((allStrings.length*16)/(8*1024)) + ' KB' : 'Empty (0 KB)';
};

var storageIsFull = function () {
    var size = localStorageSpace(); // old size

    // try to add data
    var er;
    try {
         window.localStorage.setItem("test-size", "1");
    } catch(er) {}

    // check if data added
    var isFull = (size === localStorageSpace());
    window.localStorage.removeItem("test-size");

    return isFull;
}
5

Ich habe kürzlich dieselbe Fehlermeldung erhalten, als ich an einem Projekt mit vielen JS-Dateien arbeitete und Json sendete. Die Lösung, die ich fand, bestand darin, das Eingabetyp = "Senden" -Attribut an die Eingabetyp = "Schaltfläche" zu aktualisieren. Ich weiß, es gibt Einschränkungen bei der Verwendung von input type = "button" ..> und die Lösung sieht komisch aus, aber wenn Ihre Anwendung Ajax mit JS, Json-Daten hat, können Sie es versuchen. Vielen Dank.

4
safian syed

Konfrontierte das gleiche Problem in Firefox, als ich später erfuhr, dass ich versuchte, eine HTML-Seite neu zu laden, noch bevor einige Daten im lokalen Speicher innerhalb der if-Schleife eingerichtet wurden. Sie müssen sich darum kümmern und auch prüfen, ob sich die ID wiederholt oder nicht.

Aber das gleiche hat in Chrome super funktioniert. Vielleicht ist Chrome intelligenter.

0
Shasha