Como muchas otras personas ya respondieron, solo por diversión, aquí hay un punto de referencia muy rápido (¿me atrevo a llamarlo así?); considere el siguiente código:
$num = 1;
$list = array_fill(0, 5000, str_repeat('1234567890', $num));
$before = microtime(true);
for ($i=0 ; $i<10000 ; $i++) {
$str = serialize($list);
}
$after = microtime(true);
var_dump($after-$before);
var_dump(memory_get_peak_usage());
Me estoy quedando esto en PHP 5.2.6 (el que está incluido con Ubuntu vivaces).
Y, sí, solo hay valores; sin llaves; y los valores son bastante simples: ningún objeto, ninguna sub-matriz, nada de cadenas.
Para $num = 1
, se obtiene:
float(11.8147978783)
int(1702688)
Para $num = 10
, se obtiene:
float(13.1230671406)
int(2612104)
Y, por $num = 100
, se obtiene:
float(63.2925770283)
int(11621760)
Por lo tanto, parece cuanto más grande es cada elemento de la matriz, el largo se necesita (parece justo, en realidad). Pero, para elementos 100 veces más grandes, no tomas 100 veces más tiempo ...
Ahora, con una serie de 50000 elementos, en lugar de 5000, lo que significa que esta parte del código se cambia:
$list = array_fill(0, 50000, str_repeat('1234567890', $num));
Con $num = 1
, se obtiene:
float(158.236332178)
int(15750752)
Teniendo en cuenta el tiempo que tardó en 1, no ejecutaré esto ni para $ num = 10 ni $ num = 100 ...
Sí, por supuesto, en una situación real, no estarías haciendo esto 10000 veces; intentemos con solo 10 iteraciones del ciclo for.
Para $num = 1
:
float(0.206310987473)
int(15750752)
Para $num = 10
:
float(0.272629022598)
int(24849832)
Y para $num = 100
:
float(0.895547151566)
int(114949792)
Sí, eso es casi 1 segundo - y un poco de memoria utilizada ^^
(No, esto no es un servidor de producción: Tengo una muy alta memory_limit en esta máquina desarrollo ^^)
Así que, al final, a ser un poco más cortos que los número - y, Sí, puede hacer que los números dicen lo que usted quiere que - no diría que hay un "límite", como en "codificado" en PHP, pero vas a acabar frente a uno de esos:
max_execution_time
(en general, en un servidor web, nunca es más de 30 segundos)
memory_limit
(en un servidor web, en general no es muco más de 32 MB)
- carga que tendrá el servidor web: mientras se ejecutaba 1 de esos grandes serialize-loop, tomó 1 de mi CPU; si tiene un buen par de usuarios en la misma página al mismo tiempo, te dejo imaginar lo que dará ;-)
- la paciencia de su usuario ^^
Pero, salvo si están realmente serializando matrices largas de datos grandes, no estoy seguro de que importe tanto ...
Y debe tener en cuenta la cantidad de tiempo/carga de la CPU que utiliza ese caché puede ayudarle a ganar ;-)
Aún así, la mejor manera de saberlo sería probarlo usted mismo, con datos reales ;-)
Y también puede consultar lo que Xdebug puede hacer cuando se trata de profiling: este tipo de situación es una de las que es útil.
+1 para el "punto de referencia" genial. Interesante –
La serialización de los mismos datos del mismo tipo de datos una y otra vez no es exactamente un punto de referencia real. Además, el costo real no es la serialización, es la deserialización. –
Es cierto (es por eso que no estaba seguro de poder llamarlo un punto de referencia ^^), y muy cierto (porque es la deserialización lo que más se hará, de lo contrario, no hay absolutamente ninguna razón para ponerlo en el caché) –