Come un bel paio di altre persone hanno già risposto, solo per divertimento, ecco un benchmark molto veloce (oserei chiamarlo così?); considerare il seguente codice:
$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());
Io corro questo su PHP 5.2.6 (quella in bundle con Ubuntu sbarazzino).
E, sì, ci sono solo valori; niente chiavi; e i valori sono abbastanza semplici: nessun oggetto, nessun sotto-array, niente altro che una stringa.
Per $num = 1
, si ottiene:
float(11.8147978783)
int(1702688)
Per $num = 10
, si ottiene:
float(13.1230671406)
int(2612104)
E, per $num = 100
, si ottiene:
float(63.2925770283)
int(11621760)
Così, sembra più grande è ogni elemento dell'array, il più lungo er ci vuole (sembra giusto, in realtà). Ma per elementi 100 volte più grandi, non prendi 100 volte di più ...
Ora, con una serie di 50000 elementi, invece di 5000, il che significa che questa parte del codice viene cambiato:
$list = array_fill(0, 50000, str_repeat('1234567890', $num));
Con $num = 1
, si ottiene:
float(158.236332178)
int(15750752)
Considerando il tempo necessario per 1, non eseguirò questo per $ num = 10 né $ num = 100 ...
Sì, certo, in una situazione reale, non lo faresti 10000 volte; quindi proviamo con solo 10 iterazioni del ciclo for.
Per $num = 1
:
float(0.206310987473)
int(15750752)
Per $num = 10
:
float(0.272629022598)
int(24849832)
E per $num = 100
:
float(0.895547151566)
int(114949792)
Sì, è quasi 1 secondo - e un po 'di memoria utilizzata ^^
(No, questo non è un server di produzione: ho una piuttosto elevata memory_limit su questa macchina di sviluppo ^^)
Così, alla fine, di essere un po 'più brevi di quelli numero - e, Sì, è possibile avere numeri dicono tutto quello che vuoi che - non direi c'è un "limite" come in "hardcoded" in PHP, ma si finirà per fronte a una di quelle:
max_execution_time
(in genere, su un server web, non è mai più di 30 secondi)
memory_limit
(su un server web, in genere non è muco più di 32 MB)
- il carico che il server web avrà: mentre uno di quei grandi serialize-loop era in esecuzione, ci voleva 1 della mia CPU; se si hanno un bel paio di utenti sulla stessa pagina nello stesso momento, vi lascio immaginare che cosa darà ;-)
- la pazienza del vostro utente ^^
Ma, tranne se stanno davvero serializzando gli array lunghi di , non sono sicuro che sarà così importante ...
E si deve prendere in considerazione la quantità di tempo/carico della CPU usando quella cache potrebbe aiutarti a guadagnare ;-)
Ancora, il modo migliore per sapere sarebbe quello di testare da soli, con dati reali ;-)
E si potrebbe anche voler dare un'occhiata a ciò che Xdebug può fare quando si tratta di profiling: questo tipo di situazione è uno di quelli è utile per!
+1 per il "benchmark" cool. Interessante –
La serializzazione degli stessi dati dello stesso tipo di dati più e più volte non è esattamente un vero punto di riferimento. Inoltre, il costo reale non è la serializzazione, è poco statistico. –
Vero (è per questo che non ero sicuro di poterlo chiamare un punto di riferimento ^^), e molto vero (perché non sta valutando che verrà fatto di più - altrimenti, non c'è assolutamente alcun motivo per metterlo nella cache) –