Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

319
Views
Cómo capturar NS_ERROR_OUT_OF_MEMORY silencioso en Chrome

Probé la carga de archivos muy grandes con XMLHttpRequest y noté un comportamiento interesante de Chrome (90.0.4430.212): carga el archivo completo, pero termina con un código 200-OK y un resultado vacío (!). Primero pensé que era un tiempo de espera silencioso o lo que sea, pero no, parece ser un límite de memoria alcanzado.

Probarlo en Firefox (13.0esr (64 bits)) tomó años, pero al final sabía más: la transferencia en sí no provocó un evento de "error" o "tiempo de espera", resultó con 200 y resultado vacío también . Pero arrojó un error:

 Exception { name: "NS_ERROR_OUT_OF_MEMORY", message: "", result: 2147942414, filename: "http://localhost/testcenter-backend/vo_data/teterei.html", lineNumber: 16, columnNumber: 0, data: null, stack: "transferComplete@http://localhost/testcenter-backend/vo_data/teterei.html:16:9\n" }

Entonces, no tiene nada que ver con el transporte en sí, pero aparentemente se alcanzó un límite de memoria al intentar hacer algo con el resultado. Cuando no uso oReq.response , el error no aparece.

Bien, ¿cómo manejar esto? En Firefox puedo detectar el error con un simple bloque try catch. Pero esto no funciona para Chrome. Un enfoque ingenuo sería simplemente verificar si el contenido resultante está vacío, pero me pregunto si existe otra posibilidad de detectar que esto sucede.

--

Cómo reproducir:

  1. Crea un archivo enorme.

Generé un archivo de 10,4 GB de esta manera:

 dd if=/dev/zero of=test.img bs=1024 count=0 seek=$[1024*10000]
  1. Ejecute este código en un navegador para cargarlo.

 const oReq = new XMLHttpRequest(); function updateProgress (oEvent) { console.log("progress", oEvent.loaded); } function transferComplete(evt) { console.log("The transfer is complete.", oReq.getAllResponseHeaders(), oReq.status); console.log(oReq.response); // here too much memory is allocated } function transferFailed(evt) { console.log("error", oReq.getAllResponseHeaders(), oReq.status); } function transferCanceled(evt) { console.log("cancel", oReq.getAllResponseHeaders(), oReq.status); } function timeOut(evt) { console.log("timeout", oReq.getAllResponseHeaders(), oReq.status); } oReq.addEventListener("progress", updateProgress); oReq.addEventListener("load", transferComplete); oReq.addEventListener("error", transferFailed); oReq.addEventListener("abort", transferCanceled); oReq.addEventListener("timeout", timeOut); // your huge file here instead oReq.open("GET", "https://cdn.jsdelivr.net/npm/jquery@3.2.1/dist/jquery.min.js"); // URL to huge file here oReq.send();

El límite de memoria real puede variar según su sistema.

about 4 years ago · Juan Pablo Isaza
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!