Geschwindigkeit von PHP Serialize und JSON Encode

Der Hauptvorteil von serialize, es ist eine PHP spezifische Funktion und kann alle PHP Variablen inkl. Objekte eigener Klassen repräsentieren. Mit dem Serializable wird sogar ein Interface für benutzerdefiniertes Serialisieren angeboten. Jedoch aufgrund des Funktionsumfang ist die Funktion auch sehr gefährlich. In letzter Zeit sind öfters große Sicherheitslücken in allen PHP Versionen in dieser Funktion aufgetaucht (bspw. CVE-2016-9936).

JSON hingegen ist nicht PHP spezifisch und kann als offener Standard durch andere Programmiersprachen gelesen und manipuliert werden. Auch ist das Editieren von Hand sehr einfach, weil bspw. die Änderung eines Strings nicht auch die Definition der Länge angepasst werden muss wie es bei serialize der Fall ist. Bspw. die direkte Änderung von serialisierten Optionen in der WordPress Tabelle wp_options kann leicht nach Hinten losgehen.

Aufgrund der geringeren Komplexität ist JSON auch schneller als serializeShozab Hasan hat hierfür in seinem Blog einen Geschwindigkeitstest veröffentlicht.

JSON ist somit bestens geeignet für skalare Variablen und Arrays,  schneller und auch sicherer als serialize. Kann also auf Objekte verzichtet werden, bspw. zum Cachen von Datenbankabfragen mit Memcache, kann serialize leicht durch JSON ersetzt werden.

// PHP Example
$array = array('Foo', 'Bar');

// Serialization
$serialized = \serialize($array); // a:2:{i:0;s:3:"Foo";i:1;s:3:"Bar";}
\unserialize($serialized);

// JSON Encoding
$json = \json_encode($array, \JSON_UNESCAPED_UNICODE); // ["Foo","Bar"]
\json_decode($json, true);
Kategorie: