Uso Eficiente de Memoria en PHP con WeakMaps

ángel
ángel

Descubre cómo los WeakMaps en PHP pueden optimizar el uso de memoria, mejorando el rendimiento y escalabilidad de tus aplicaciones.

En el ámbito del desarrollo web, la optimización del manejo de memoria juega un papel crucial en asegurar el rendimiento y la escalabilidad de nuestras aplicaciones. En PHP, existe una herramienta poco reconocida pero sumamente eficaz para esta tarea: el WeakMap.

A lo largo de este artículo, trataré de explicar en qué consiste un WeakMap, cómo se distingue de un array convencional y de qué manera puede contribuir a una gestión más efectiva de la memoria en nuestras aplicaciones PHP.

¿Qué es un WeakMap?:

Un WeakMap en PHP es una estructura de datos que nos permite asociar pares de llaves y valores, pero con una característica única: maneja las llaves como referencias débiles. Esto significa que si la única referencia a una llave está dentro del WeakMap, la llave será eliminada automáticamente de la memoria cuando ya no se utilice en ningún otro lugar del código.

Diferencias con un Array Normal:

La principal diferencia entre un WeakMap y un array normal radica en cómo manejan las referencias a las llaves. Mientras que un array normal mantiene las llaves en memoria incluso si ya no se utilizan en ningún otro lugar del código, un WeakMap elimina automáticamente las llaves de la memoria cuando ya no son necesarias, lo que ayuda a optimizar el uso de memoria en nuestra aplicación.

Ejemplo Práctico:

1<?php
2 $weakMap = new WeakMap();
3 $objetoLlave = new stdClass();
4 $weakMap[$objetoLlave] = "Valor asociado";
5 echo $weakMap[$objetoLlave] . "\n";
6 unset($objetoLlave);
7 echo "La llave ya no existe en el WeakMap\n";

Al ejecutarlo me da los siguientes resultados:

1Valor asociado
2La llave ya no existe en el WeakMap

Ahorro de Memoria:

Para ilustrar cómo un WeakMap puede ayudar a optimizar el uso de memoria, comparemos el uso de memoria entre un WeakMap y un array normal en un escenario donde necesitamos asociar objetos con valores en grandes cantidades.

Ejemplo Práctico:

1<?php
2 $sizeBefore = memory_get_usage();
3 $weakMap = new WeakMap();
4 for ($i = 0; $i < 100000; $i++) {
5 $objeto = new stdClass();
6 $weakMap[$objeto] = $i;
7 }
8 $sizeAfter = memory_get_usage();
9 echo "Uso de memoria con WeakMap: " . ($sizeAfter - $sizeBefore) . " bytes\n";
10 
11 $sizeBefore = memory_get_usage();
12 $array = [];
13 for ($i = 0; $i < 100000; $i++) {
14 $array[$i] = $i;
15 }
16 $sizeAfter = memory_get_usage();
17 echo "Uso de memoria con array normal: " . ($sizeAfter - $sizeBefore) . " bytes\n";

Al ejecutarlo me da los siguientes resultados:

1Uso de memoria con WeakMap: 776 bytes
2Uso de memoria con array normal: 2113616 bytes

Recuerda que estos resultados pueden variar según las características del equipo donde sea ejecutado 🙂

En resumen

Un WeakMap en PHP es una herramienta valiosa para optimizar el uso de memoria en nuestras aplicaciones al manejar las referencias a las llaves de manera más eficiente. Al utilizar un WeakMap en lugar de un array normal, podemos mejorar el rendimiento y la escalabilidad de nuestras aplicaciones al reducir el consumo de memoria.

Puedes considerar incorporar WeakMaps en tu código PHP para una gestión más eficiente de la memoria y un mejor rendimiento global de tu aplicación.

Te podrá interesar

Descubre Cache UI Laravel, el paquete que te permite listar, buscar, previsualizar y eliminar claves de caché individuales desde Artisan. Compatible con Redis,

Descubre todas las inteligencias artificiales que funcionan en WhatsApp en 2025. Lista completa con números, enlaces wa.me y cómo empezar a usarlas.

Context7 brinda documentación oficial y actualizada a asistentes de código IA, evitando errores por ejemplos obsoletos y APIs desactualizadas.

Logo de Angel Cruz

Made with ♥️ & 🧉 in Montevideo, Uruguay Buenos Aires, Argentina.

[AC].dev is not affiliated with Laravel or Laravel LLC. Laravel is a Trademark of Taylor Otwell.

Code highlighting provided by Torchlight.