Creé una función que agregará dinámicamente contenido xml a una variable de cadena en el navegador en el momento de la carga. Sin embargo, cuando la cadena se vuelve enorme, se perderá la memoria. Creé una función que permite al usuario descargar como formato xls.
Para un ejemplo,
//Esto tiene 1k registros que se traducen como contenido xml que se almacena en la variable uri en el navegador. Podemos descargar el archivo xls sin problema
//String length eg 20k var workbookXML = 'data:application/vnd.ms-excel;base64,.......<?xml version="1.0"?><?mso-.application progid="Excel.Sheet"?>.........'ahora, cuando estoy agregando un gran volumen de datos que se traducen en contenido xml, esto hará que el navegador se detenga y provoque un problema de pérdida de memoria en el navegador
//String length eg 20million var workbookXML = 'data:application/vnd.ms-excel;base64,.......<?xml version="1.0"?><?mso-.application progid="Excel.Sheet"?>.........'He buscado en writableStream pero esto resultará igual que en el navegador. . ¿Cuáles son los mejores enfoques en estos casos de uso para resolver big data en una sola variable de cadena en el navegador?
¿Debo convertir la cadena en bytes binarios antes de exportar como formato xls?
var excel_blob = new Blob([workbookXML], { type: 'data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }); var link = document.createElement("A"); link.href = window.webkitURL.createObjectURL(excel_blob) link.download = "BigData" + ".xls"; link.target = '_blank'; document.body.appendChild(link); link.click(); document.body.removeChild(link);¿Cuáles son los mejores enfoques en estos casos de uso para resolver big data en una sola variable de cadena en el navegador?
Sencillo: no.
¿Parece que estás intentando descargar archivos? Ya existe un protocolo probado y verdadero para descargar archivos, que utiliza una solicitud de obtención para recuperar un archivo (o varios archivos, si su navegador lo admite).
No hay absolutamente ninguna necesidad de almacenar todo el archivo en html en una cadena base64, agregarlo a su DOM como un elemento, hacer clic en él para iniciar la descarga y eliminarlo. Eso es una locura.