Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

321
Vistas
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
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda