es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Javascript: Quiero guardar un PDF desde una tabla de materiales. Después de hacer clic en descargar PDF, tarda más de unos minutos y la pantalla se congela.

Tengo más de 150k registros en mi tabla. ¿Qué error estoy cometiendo?
Función que estoy llamando.

const exportarPDF = () => {

    var doc;
    if (download_fields.length < 9) {
        doc = new jsPDF('p', 'mm', [297, 210]);
    }
    else {
        doc = new jsPDF('l', 'pt', [12000, 12000]);
    }
    const data = download_data.map(elt => {
        let download_arr = []
        download_fields.forEach(e => { Object.entries(elt).forEach(entry => {e === entry[0] ? download_arr.push(entry[1]) : null}) })
        // console.log(download_arr)
        return (
            download_arr
        )
    });

    doc.autoTable(download_headers, data, {
        margin: { top: 15 },
        styles: { fontSize: 14, halign: 'center' },
        theme: "grid",
        didParseCell: function (data) {

            if (data.row.index === 0 && data.section !== 'body') {
                data.cell.styles.fillColor = [0, 102, 204];
                data.cell.styles.lineWidth = 2;
            }
        }
    });

    doc.save(`${file_name}.pdf`);
}

La línea donde estoy creando los datos está tardando más tiempo en ejecutarse. Hasta entonces no puedo realizar ninguna otra tarea en la pantalla (se congela).
El tiempo de conversación está bien si encontramos alguna solución para realizar otras tareas mientras genera el PDF en paralelo.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que la función que estás llamando está tardando demasiado en ejecutarse debido a la gran cantidad de datos que está manejando. Un error que puedes estar cometiendo es intentar procesar los 150 mil registros de una sola vez.

    Para optimizar el rendimiento de tu código, puedes intentar implementar la paginación o la carga perezosa, donde los datos se cargan de forma asíncrona y en pequeños fragmentos, permitiendo que otras tareas en la pantalla se realicen sin congelarse.

    Además, puedes investigar si hay bucles innecesarios o algoritmos ineficientes en tu código que se puedan optimizar. También puedes explorar el uso de trabajadores web para manejar cálculos pesados en segundo plano, liberando el hilo principal para otras tareas.

    En general, optimizar el rendimiento de tu código es crucial para evitar congelamientos y mejorar la experiencia del usuario al manejar grandes cantidades de datos.

Comments are closed.