valor - strip_tags php ejemplo
¿Qué tan importante es desarmar variables en PHP? (4)
Depende, debes asegurarte de haber unset
cadenas muy largas (como el contenido de una publicación de blog seleccionado de un db).
<?php
$post = get_blog_post();
echo $post;
unset($post);
?>
Soy algo nuevo en PHP, y me pregunto:
¿Qué tan importante es desarmar variables en PHP?
Sé que en idiomas como C, liberamos la memoria asignada para evitar fugas, etc. Al usar las variables no ajustadas cuando termino con ellas, ¿esto aumentará significativamente el rendimiento de mis aplicaciones?
Además, ¿existe un punto de referencia en cualquier lugar que compare la diferencia entre usar unset y no usar unset?
Hay muchas situaciones en las que el desarmado no desasignará gran parte de nada, por lo que su uso generalmente no tiene sentido a menos que el flujo lógico de su código requiera su inexistencia.
Las aplicaciones que se escriben en idiomas como C generalmente se ejecutan durante muchas horas. Pero el tiempo de ejecución habitual de la aplicación php es de aproximadamente 0,05 segundos. Entonces, es mucho menos importante usar unset.
Vea este ejemplo (y el blog.preinheimer.com/index.php?/archives/… he vinculado debajo de la pregunta):
$x = str_repeat(''x'', 80000);
echo memory_get_usage() . "<br>/n"; // 120172
echo memory_get_peak_usage() . "<br>/n"; // 121248
$x = str_repeat(''x'', 80000);
echo memory_get_usage() . "<br>/n"; // 120172
echo memory_get_peak_usage() . "<br>/n"; // 201284
Como puede ver, en un momento PHP había usado casi el doble de memoria. Esto se debe a que antes de asignar la cadena '' $x
'' a $x
, PHP crea la nueva cadena en la memoria, mientras mantiene la variable anterior en la memoria también. Esto podría haberse evitado con la unset
$x
.
Otro ejemplo:
for ($i=0; $i<3; $i++) {
$str = str_repeat("Hello", 10000);
echo memory_get_peak_usage(), PHP_EOL;
}
Esto dará como resultado algo así como
375696
425824
425824
En la primera iteración, $str
sigue vacío antes de la asignación. En la segunda iteración $str
mantendrá la cadena generada sin embargo. Cuando str_repeat
se llama por segunda vez, no sobrescribirá inmediatamente $str
, sino que primero crea la cadena que se asignará en la memoria. Entonces terminas con $str
y el valor que debería asignarse. Doble memoria. Si desarma $str
, esto no sucederá:
for($i=0;$i<3;$i++) {
$str = str_repeat("Hello", 10000);
echo memory_get_peak_usage(), PHP_EOL;
unset($str);
}
// outputs something like
375904
376016
376016
¿Importa? Bueno, el artículo vinculado lo resume bastante bien con
Esto no es crítico, excepto cuando lo es.
No está de más deshacer las variables cuando ya no las necesitas. Tal vez se encuentre en un host compartido y quiera iterar sobre grandes conjuntos de datos. Si la desactivación impediría que PHP finalice con el tamaño de memoria Permitido de XXXX bytes agotados , entonces vale la pena el pequeño esfuerzo.
Lo que también se debe tener en cuenta es que, incluso si la duración de la solicitud es de solo un segundo, al duplicar el uso de memoria se reduce a la mitad la cantidad máxima de solicitudes simultáneas que se pueden atender. Si de todos modos no estás cerca del límite del servidor, a quién le importa, pero si lo estás, un simple desarmado podría ahorrarte el dinero para obtener más RAM o un servidor adicional.