Willkommen in der Webstatt Zum Webstatt Blog und Stories
Rebel4s Rebel4s am 30.07.07 17:03

Hallo,
Ich habe mir eine Cache Klasse gebastelt.
Da aber serialize und unserialize auch Zeit kostet und der Cache möglichst schnell sein soll, soll die serialize funktion nur optional sein, bzw. nur dann wenn es auch sinnvoll ist.
Also nur Objekte und Arrays sollen mit serialize behandelt werden, dass ist ja auch beim speichern in den Cache kein Problem.
Nur wenn ich das dann wieder aus dem Cache lade, wie kann ich wissen, ob der Inhalt nun mit serialized behandelt wurde? Dese überprüfung sollte natürlich nicht sehr umständlich sein ;)
Warum gibt es keine funktion wie is_serialized() ?

netcup.de Warum gibt es hier Werbung?
Wasili am 30.07.07 17:20

Solange du nicht alles in eine Datei packst kannst du ja normale Variablen als .cache speichern und serialisierte Variablen als .ser.cache. z.B. ^^

Im übrigen ist es oft so (vor allem bei stark frequentierten Seiten), dass MySQL der Flaschenhals ist, und nicht PHP. Ein paar mal unserialize mehr ist trotzdem noch schneller als X Datensätze wieder zu "lesen". ^^

Rebel4s Rebel4s am 30.07.07 17:24

Quote
Original von Wasili
Solange du nicht alles in eine Datei packst kannst du ja normale Variablen als .cache speichern und serialisierte Variablen als .ser.cache. z.B. ^^

Im übrigen ist es oft so (vor allem bei stark frequentierten Seiten), dass MySQL der Flaschenhals ist, und nicht PHP. Ein paar mal unserialize mehr ist trotzdem noch schneller als X Datensätze wieder zu "lesen". ^^


Ich denke ich serialize einfach alles, ist glaub ich ~genauso schnell wie es so zu überprüfen was es nun ist.

Wasili am 30.07.07 17:36

Ich frage mich gerade: Es macht nur Sinn, Objekte und Arrays zu serialisieren. Und die *kann* man nicht anders speichern. Ausgenommen Arrays, da könnte man wieder n' PHP-Script basteln, aber ob das wirklich Sinn macht?

Rebel4s Rebel4s am 30.07.07 17:52

Quote
Original von Wasili
Ich frage mich gerade: Es macht nur Sinn, Objekte und Arrays zu serialisieren. Und die *kann* man nicht anders speichern. Ausgenommen Arrays, da könnte man wieder n' PHP-Script basteln, aber ob das wirklich Sinn macht?


Jo Deswegen, nur wie unterscheidet man einen String von einem serializierten Objekt/Array

Wasili am 30.07.07 22:47

Check das Muster.... ;p

(Mir ergibt sich den Sinn vom Speichern einzelner Strings irgendwie nicht?)

Rebel4s Rebel4s am 31.07.07 00:47

Ein String könnt ja auch der ganze output sein.

Snake am 31.07.07 01:01

test:
<?php
$start = microtime(true);
$ar = array();
for($i=0;$i<100000;$i++) {
$t = md5(microtime(true).rand(0,99));
$ar[$i] = serialize($t);
}

echo 'serialize: '.(microtime(true) - $start).'<br>';


$start = microtime(true);
$ar2 = array();
for($i=0;$i<100000;$i++) {
$t = md5(microtime(true).rand(0,99));
$ar2[$i] = is_string($t); //macht keinen sinn, aber um das ergebnis nicht zu verfälschen!
}

echo 'is_string: '.(microtime(true) - $start).'<br>';

$start = microtime(true);
for($i=0;$i<100000;$i++) {
md5(microtime(true).rand(0,99)); // um das ergebnis nicht zu verfälschen
serialize($ar[$i]);
}

echo 'unserialize: '.(microtime(true) - $start);

?>


ausgabe: serialize: 1.96216917038
is_string: 1.83440518379
unserialize: 1.8778719902


also du bräuchtest beim abspeichern schon genau so lange zum prüfen, ob es nun serialisiert werden soll oder nicht, als es einfach zu tun.
jag einfach alles durch serialize, und unserialize nacher wieder alles. bist du am besten dran

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt