Wie schon ein paar andere Leute bereits geantwortet haben, nur zum Spaß, hier ist eine sehr schnelle Benchmark (traue ich es so nennen?); Sehen Sie den folgenden Code:
$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());
Ich laufe dies auf PHP 5.2.6 (die mit Ubuntu feschen gebündelt).
Und ja, es gibt nur Werte; keine Schlüssel; und die Werte sind ziemlich einfach: kein Objekt, kein Sub-Array, nichts anderes als String.
Für $num = 1
erhalten Sie:
float(11.8147978783)
int(1702688)
Für $num = 10
erhalten Sie:
float(13.1230671406)
int(2612104)
Und für $num = 100
erhalten Sie:
float(63.2925770283)
int(11621760)
So scheint es Je größer jedes Element des Arrays ist, desto länger Es dauert (scheint fair, eigentlich). Aber für Elemente 100 mal größer, nehmen Sie nicht 100 mal länger ...
nun mit einer Reihe von 50000 Elementen, anstelle von 5000, die diesen Teil des Codes bedeutet, wird geändert:
$list = array_fill(0, 50000, str_repeat('1234567890', $num));
Mit $num = 1
erhalten Sie:
float(158.236332178)
int(15750752)
In Anbetracht die Zeit, die es für 1 dauerte, werde ich nicht für entweder $ num = 10 noch $ num = 100 ...
ausführen Ja natürlich, in einer realen Situation würden Sie das nicht 10000 Mal tun; Versuchen wir es mit nur 10 Wiederholungen der for-Schleife.
Für $num = 1
:
float(0.206310987473)
int(15750752)
Für $num = 10
:
float(0.272629022598)
int(24849832)
Und für $num = 100
:
float(0.895547151566)
int(114949792)
Ja, das ist fast 1 Sekunde - und ziemlich viel Speicher verwendet ^^
(Nein, das ist kein Produktionsserver: Ich habe eine ziemlich hohe memory_limit auf dieser Entwicklungsmaschine ^^)
Also, am Ende, ein bisschen kürzer als die Zahl zu sein - und, ja, können Sie Zahlen sagen, was Sie wollen, dass sie - würde ich nicht sagen, dass es eine „Grenze“, wie in „hartcodiert“ in PHP, aber Sie werden eine der Personen, die am Ende:
max_execution_time
(im Allgemeinen auf einem Webserver sind es niemals mehr als 30 Sekunden)
memory_limit
(auf einem Webserver ist es in der Regel nicht mehr als 32MB)
- die Last, die Sie Webserver haben: während 1 dieser großen Serialisierung-Schleife ausgeführt wurde, dauerte es 1 meiner CPU; wenn Sie ganz ein paar Benutzer auf der gleichen Seite zur gleichen Zeit zu haben, lasse ich Sie sich vorstellen, was es ;-)
- die Geduld des Benutzers geben ^^
Aber, es sei denn, wenn Sie sind wirklich Serialisierung langen Arrays von großen Daten, ich bin mir nicht sicher, es wird so viel Bedeutung ...
Und Sie müssen berücksichtigen, die Menge an Zeit/CPU-Auslastung mit diesem Cache könnte Ihnen helfen zu gewinnen ;-)
Dennoch wäre der beste Weg, um zu testen, mit echten Daten ;-)
Und Sie möchten vielleicht auch einen Blick auf das, was Xdebug nehmen tun können, wenn es um profiling kommt: diese Art von Situation ist einer von denen es für sinnvoll ist!
+1 für den coolen "Benchmark". Interessant –
Serialisierung der gleichen Daten des gleichen Datentyps immer wieder ist nicht gerade ein echter Benchmark. Plus, die tatsächlichen Kosten sind nicht Serialisierung, es ist unserializing. –
True (deshalb war ich mir nicht sicher, ob ich es als Benchmark bezeichnen könnte ^^), und sehr wahr (weil es unserialisiert, wird das am meisten gemacht - sonst gibt es absolut keinen Grund, das in den Cache zu stellen) –