Ich lade zwei 300MB MP3-Dateien in eine AudioBuffer
und fahre fort, sie als WAV-Dateien zu kodieren. Irgendwann während des Kodierungsprozesses (der in einem Web-Worker passiert) stürzt der Browser wegen mangelndem Arbeitsspeicher ab.Wie kann man einen Crash-Speicher abfangen und damit umgehen?
WAV-Dateien sind etwa 3 mal größer ist als MP3-Dateien, so wäre es ~ 1,8 GB zusätzlichen Speicherplatz benötigen die Umwandlung zu tun.
Die Dateien können eine beliebige Größe haben, da es sich um MP3-Dateien handelt, die der Benutzer zum Hochladen ausgewählt hat, sodass sie 10 MB oder 350 MB groß sein können. Dies bedeutet, dass der Speicher ausreichend sein kann oder nicht. Für den Fall, dass es nicht ausreicht, wie kann ich einfach den Fehler fangen und behandeln, anstatt den Browser abstürzen zu lassen?
Ich würde den Benutzer auf ein bestimmtes Projekt (alle Dateien kombiniert) Größe begrenzen, aber es scheint, dass die maximale Speichergrenze mit dem Betriebssystem, Betriebssystemarchitektur, Browserversion und Browser-Architektur variiert, die es fast unmöglich macht, ein solches Limit zu definieren .
Diese Antwort (https://stackoverflow.com/a/34667584/5086286) schlägt vor, dass die Betriebssystem- und Browser-Version eine Auswirkung auf das Speicherlimit haben, obwohl er über den gesamten Registerkarten-Speicher sprechen könnte, während Sie sprechen speziell über die Größe des JS-Heapspeichers. Ich denke, dass die 'AudioBuffer' im Heap des V8 enthalten sind, denn wenn ich einen" Heap-Snapshot "nehme, ist dieser enthalten. Was die WAV-Codierung angeht, konvertiere ich in eine 16-Bit-Datei, was erklären könnte, warum sie nur 3-4 mal so groß ist. Ich werde das JS-Heap-Limit testen und werde mich an Sie wenden. Vielen dank für Deine Hilfe! – maximedupre
Ich habe derzeit eine Arbeitsseite, die eine JS-Heap-Größe von 1503MB hat (entsprechend einem Heap-Snapshot), was mich glauben lässt, dass 1400MB nicht das Limit ist. – maximedupre
Huh, guter Punkt. Es stellte sich heraus, dass das Limit 1400 MB betrug, bis Chrome M56 und M57 es auf 2048 MB brachten. Ich werde meine Antwort aktualisieren. – jmrk