Nebojte se serialize()

Prosím, berte tento článek s značnou rezervou. Byl psán mým mladým Já, které se teprve učilo!

PHP slon

Konečně jsem se odhodlal a zkouším napsat nějaký odborný článek. Moc jsem po tom nepátral (i když jsem asi měl), ale zdá se mi že php funkce serialize() a unserialize() nejsou moc oblíbené. Je to možná kvůli jejich náročnosti. Tak jsem si udělal vlastní výzkum.

Protože při vývoji aktuální verze hry, bylo třeba uložit do databáze mapu. Uvažoval jsem co na to využit. Mapa se skládá z několika vrstev z čehož nejobsáhlejší vrstvou jsou textury. Mapa má rozměry 60*60 takže je celkem 3600 políček s texturami a každé poličko obsahuje jinou hodnotu.

Postavil jsem si proto jakýsi benchmark který měří časovou náročnost a velikost výstupu funkcí serialize() a unserialize() a funkcí implode() a explode() (pro porovnání) a výsledky mě velice mile překvapily.

<?php
for($i=0; $i<1000; $i++){
	$pole[$i] = "12345";
}
$zacatek = mikrocas();
$ser = serialize($pole);
echo "<tr><td>Čas zpracování: ". (round((mikrocas() - $zacatek)/100,5)) ." s</td></tr>";
echo "<tr><td>Výsledná velikost: ". tri(strlen($ser)) ."</td></tr>";
unset($ser, $pole);
?>

Ukázka zdrojového kódu souboru se1000.php

Celý benchmark s výsledky měření si můžete prohlédnout na adrese ukazky.herangr.cz/serialize/.

Pro mně asi největším překvapení bylo že více rozměrové pole má menší výstup než pole jedno rozměrové. Také si můžete všimnout že funkce implode() a explode() jsou rychlejší a jejich výstup je menší, ovšem pro mé účely se příliš nehodily, protože nedokáži uložit index pole. Naopak při ukládání stotisícového pole přes serialize() je téměř 20x větší než vstup (při délce obsahu každého prvku pole 5 znaků).

Zdroj obrázků http://www.squidoo.com/

Lukáš Tížek © 2010 - 2021 | 
statistiky

Statistiky:

Ø blogů denně: 0.0223
Ø pismen denně: 55.8916
celkem blogů: 92
celkem znaků: 231 056
první blog: 3. ledna 2010
stáří blogu: 4 134 dnů
 | 
rozcestník

Som napsal: