Cuando trabajas en un entorno Node.js con TypeScript a menudo necesitas un mecanismo de caché sencillo y ligero para mantener variables vivas mientras el proceso del servidor esté en ejecución. En Q2BSTUDIO, empresa de desarrollo de software y aplicaciones a medida, utilizamos esta técnica para evitar llamadas externas redundantes y mejorar el rendimiento en integraciones reales.
El problema que resolvimos surgió en un proyecto de gestión de reservas para talleres. Cada reserva incluía un vehicle_id que apuntaba a un vehículo en un sistema externo. Un tercero necesitaba obtener datos de la reserva y los detalles del vehículo en la misma llamada API. Para ello creamos un hook que se ejecuta antes de cada fetch de reservas y que: detecta si existe vehicle_id, obtiene los datos completos del vehículo desde el sistema externo y adjunta el objeto vehicle al resultado de la reserva.
El reto fue evitar llamadas API duplicadas. Los datos de los vehículos no cambian con frecuencia, por lo que repetir la consulta para el mismo vehicle_id malgasta tiempo y ancho de banda. La solución fue una capa de caché en memoria que vive mientras el servidor esté activo.
Qué es globalThis y por qué usarlo globalThis es un objeto global en JavaScript y TypeScript que ofrece acceso al scope global independientemente del entorno. Cualquier variable que adjuntes a globalThis será accesible desde cualquier parte del código y permanecerá mientras el proceso siga vivo. Ejemplo de uso práctico: globalThis.myAppName = DriveMotive; console.log(globalThis.myAppName);
Usar globalThis con TypeScript requiere declarar el tipo para evitar errores del compilador. Si escribes globalThis.__vehicleCache = new Map(); TypeScript arrojará un error porque no conoce la propiedad __vehicleCache. Para solucionarlo se siguen tres pasos:
1) Indicar que el archivo es un módulo añadiendo export {}; en el fichero de tipos, por ejemplo types.d.ts.
2) Declarar la variable global para TypeScript con declare global y especificar el tipo. Un ejemplo sencillo sería declarar una variable __vehicleCache de tipo Map o undefined, expresado en texto como Map de string a any si se quiere evitar el uso de caracteres de generics.
3) Inicializar la caché en la lógica de la aplicación si no existe aún. Una línea práctica es const vehicleCache = (globalThis.__vehicleCache ??= new Map()); Esta expresión comprueba si __vehicleCache ya existe en globalThis, si existe lo asigna a vehicleCache y si no existe crea una nueva Map y la asigna.
Con este patrón se logra un almacenamiento en memoria simple y eficiente para reutilizar datos durante la vida del proceso. Es ideal para datos que cambian poco, como los detalles de vehículos en nuestro caso, y evita llamadas innecesarias a servicios externos.
Consideraciones y buenas prácticas
Usar globalThis para caché en memoria es sencillo pero requiere precaución: controlar el tamaño de la caché para evitar agotamiento de memoria, implementar invalidaciones o TTL cuando los datos puedan cambiar, y documentar la existencia de variables globales para el equipo. Para entornos distribuidos o con múltiples instancias de servidor hay que combinar esto con soluciones de caché compartido si se necesita coherencia entre instancias.
En Q2BSTUDIO aplicamos estos enfoques en proyectos de software a medida y plataformas integradas, complementando con servicios cloud cuando es necesario. Si buscas desarrollar una solución robusta y escalable podemos ayudarte con desarrollo de aplicaciones a medida y arquitectura en la nube, o bien integrar capacidades de inteligencia artificial para optimizar procesos y automatizar decisiones.
Palabras clave relevantes: aplicaciones a medida, software a medida, inteligencia artificial, ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio, ia para empresas, agentes IA, power bi. Si te interesa un enfoque personalizado para tu proyecto o quieres implementar un sistema de caché sencillo y efectivo en Node.js con TypeScript, en Q2BSTUDIO somos especialistas listos para ayudarte.