PDFs grans en Node.js sense emmagatzematge en búfer il·limitat

El teu worker de Node.js col·lapsa amb PDFs grans? Descobreix com evitar la saturació de memòria amb backpressure, límits de bytes i concurrència controlada.

martes, 14 de julio de 2026 • 4 min de lectura • Equip Q2BSTUDIO

Com manejar PDFs grans sense saturar la memòria

Processar arxius PDF de gran mida en aplicacions Node.js és un desafiament tècnic que molts equips subestimen fins que el seu sistema col·lapsa en producció. El patró habitual de rebre l'arxiu complet en memòria, analitzar-lo amb llibreries com pdf-lib i retornar un resultat funciona raonablement bé en entorns controlats, però quan el volum de peticions concurrents creix, la infraestructura comença a mostrar símptomes preocupants: esgotament del heap de V8, errors 413 en funcions serverless i un increment progressiu de la latència a causa de bloquejos de l'event loop. Darrere de cadascuna d'aquestes fallades no hi ha un error de codi, sinó una decisió arquitectònica que ignora els límits físics d'un sol procés de Node. L'arrel del problema és que el format PDF requereix que l'analitzador tingui accés a tot l'arxiu resident per poder interpretar la taula de referències creuades (xref) que es troba al final. Això impedeix un veritable streaming, però sí que és possible controlar tres variables crítiques: quants bytes entren al worker, on resideixen aquests bytes durant la fase de pujada i quantes anàlisis s'executen en paral·lel. La solució més robusta que hem implementat en Q2BSTUDIO per a projectes que manegen documents sensibles consisteix a separar la ruta de pujada de la ruta d'anàlisi. El client envia l'arxiu directament a un emmagatzematge d'objectes (com S3 o R2) mitjançant una URL prefirmada, i després passa la URL pública a l'endpoint de verificació. D'aquesta manera, el servidor Node mai veu els bytes durant la fase de transferència, que és la que més recursos consumeix en termes de concurrència. El worker d'anàlisi descarrega el PDF des de la URL amb un mecanisme de contrapressió que limita la mida màxima per arxiu —per exemple, 10 MB— i avorta la connexió si se supera aquest límit abans que el contingut arribi complet. Això evita que un arxiu maliciós o excessivament gran ocupi memòria innecessàriament. A més, s'implementa un semàfor explícit que limita el nombre d'anàlisis simultànies (entre 2 i 6 segons la capacitat del worker), impedint que la suma dels buffers residents superi el llindar de memòria disponible. El resultat d'aquest enfocament és que el perfil de latència es torna predictible fins i tot sota càrrega alta. L' article original descriu amb detall la implementació usant fetch amb AbortController, un comptador de bytes en el bucle de lectura i una concatenació final acotada. Aquesta tècnica, combinada amb un timeout global de 30 segons i la verificació primerenca del header Content-Length, protegeix el worker d'atacs slowloris i d'arxius que excedeixin el límit declarat. En producció, a més, és fonamental establir un pressupost de bytes en vol total per worker i monitorar el heap utilitzat amb eines com clinic.js o l'inspector de Node. Des d'una perspectiva empresarial, manejar PDFs grans de forma segura i eficient és un requisit cada vegada més comú en sectors com fintech, salut i legal, on els documents bancaris, informes mèdics o contractes arriben amb pesos que superen els 5 MB. Les aplicacions a mesura que desenvolupem en Q2BSTUDIO integren aquestes pràctiques de manera nativa, assegurant que el sistema sigui escalable sense necessitat de sobredimensionar la infraestructura. Els nostres serveis cloud AWS i Azure permeten desplegar arquitectures que separen l'emmagatzematge del còmput, usant funcions serverless amb límits de memòria ajustats o workers dedicats en plataformes com Fly.io o Coolify. A més, la detecció de manipulacions en PDFs —que és el cas d'ús principal de l'anàlisi— es beneficia de tècniques d'intel·ligència artificial que identifiquen firmes de re-editat, com canvis en metadades, cadenes d'actualització incremental o discrepàncies en dates. En Q2BSTUDIO combinem aquestes capacitats amb serveis d'intel·ligència de negoci com Power BI per visualitzar mètriques de rendiment i detectar patrons d'ús anòmals. La ciberseguretat també juga un paper important: en evitar que el servidor rebi l'arxiu directament, es redueix la superfície d'atac i es preveu l'execució de codi maliciós incrustat en el PDF. Tot això forma part d'un enfocament integral que oferim als nostres clients, on els agents IA poden orquestrar fluxos de verificació documental sense intervenció humana. Per a equips que busquen una solució llesta per a producció, la nostra recomanació és començar amb una implementació que inclogui un límit de concurrència, una mida màxima per arxiu i un timeout, i després monitoritzar l'ús de memòria amb eines com Sentry per detectar regressions. Si el volum supera el que un sol worker pot manejar, el següent pas natural és introduir una cua de treball amb diversos consumidors, tema que abordem en altres articles. En definitiva, manejar PDFs grans en Node.js sense emmagatzematge en búfer il·limitat no només és possible, sinó necessari per mantenir l'estabilitat del sistema. La clau està en separar responsabilitats, aplicar límits explícits i mesurar tot. En Q2BSTUDIO ajudem les empreses a dissenyar i implementar aquestes arquitectures, combinant desenvolupament de programari a mida, cloud computing, intel·ligència artificial i ciberseguretat per crear solucions robustes i preparades per al futur.

ELS NOSTRES SERVEIS

Com et podem ajudar

Tens un projecte en ment?

Explica'ns la teva visió i la convertim en una solució de programari. Sigui quin sigui l'abast, fem realitat la teva idea.