In meinem kleinen Alter mit WordPress habe ich gesehen, dass WordPress selbst und seine benutzerfreundlichen Plugins serialize()
in vielen Fällen PHP zum Speichern von Daten in db verwenden. Aber bei einer kürzlich durchgeführten Suche habe ich eine ernsthafte Unterstützung der Community für das json_encode()
Internet gefunden serialize()
.
- Ein Test, der beweist, dass er
json_encode()
besser ist alsserialize()
- StackOverflow - Gründe, warum
json_encode()
verwendet werden kann und warum nicht - StackOverflow
Und ich persönlich habe mit beiden ein assoziatives Array getestet, das Folgendes zeigt:
serialize()
speichert 342 Zeichenjson_encode()
speichert 285 Zeichen
Warum frage ich das?
Ich arbeite an einem Projekt, während ich wiederkehrende Metafelder in einem Beitrag speichern werde. Wo:
- Die Daten sind grundsätzlich in Englisch, können aber auch in Bengali vorliegen
- Die Daten wären assoziative Arrays mit einer Tiefe von 3 Ebenen (ich hoffe, ich habe die Ebenen richtig verstanden ):
array(
1 => array(
'key'=>'value',
'key2'=>'value'
),
2 => array(
'key'=>'value',
'key2'=>'value'
)
)
Ich habe postmeta
das meta_value
Feld der Tabelle überprüft, es ist ein longtext
, das bedeutet eine Länge von 4.294.967.295 Zeichen (4 GB).
Also brauche ich eine robuste Lösung für die Aufbewahrung.
Antworten:
Ich denke, nicht 100% sicher , dass dies der wahre Grund für den WP - Entwickler diesen Ansatz nahm, aber die gesunde Menschenverstand sagt mir , dass serialize bewahrt die Variablentypen und hat eine Mini bei der Fehlererkennung gebaut und json speichert nur Werte Zeichenfolge
{ key : value }
, so dass , wenn Sie Gehen Sie zurück zu PHP. Sie müssen das Format erraten oder einen Parser dafür erstellen. Dies zwingt Sie dazu, auf zwei verschiedene Arten mit Ihren Daten umzugehen: Vorherige, Speichern der Daten als json und nach dem Dekodieren des json wird es als ein völlig anderes Objekt zurückgegeben.Dies ist der Hauptgrund für den Unterschied in der Größe, PHP speichert nicht nur ein Array; Es speichert, wie viele Elemente im Array waren, als es serialisiert wurde, ihre Typen und ihre Werte.
Sie speichern nicht nur Schlüsselwertpaare in der Datenbank, sondern möglicherweise auch ein Objekt mit unterschiedlichen Variablentypen.
quelle
Die JSON-Codierung wurde in PHP 5.2 eingeführt, WordPress ist viel älter und wurde für PHP 4 entwickelt.
Die Serialisierung von Daten ist in WordPress allgegenwärtig. Ein Wechsel von der PHP-Serialisierung zur JSON-Codierung würde daher ein großes Abwärtskompatibilitätsproblem bedeuten. Wenn ich WordPress ein wenig kenne, wird dies niemals passieren.
Wenn Sie jedoch der Meinung sind, dass die JSON-Codierung für Sie besser ist als die PHP-Serialisierung, verwenden Sie sie einfach.
Wenn Sie eine Zeichenfolge (das ist die JSON-codierte Version Ihrer Daten) zum Posten von Metafunktionen übergeben, wird WordPress diese nicht berühren, Sie müssen jedoch beim Abrufen daran denken, die Daten mit JSON zu decodieren.
Wenn die Größe des DB-Speichers für Sie sehr wichtig ist, ist es wahrscheinlich die zusätzliche Arbeit wert. Andernfalls lassen Sie WordPress einfach das verwenden, was es verwendet, und kümmern sich nicht darum.
Vielleicht können Sie auswerten, ob es sich um benutzerdefinierte Tabellen handelt, um Ihre Daten zu speichern.
quelle
Ich bin versucht, dies als "vorbehaltlich der Meinung" zu schließen, aber ich denke, es gibt ein paar gute Antworten auf die Frage. Ich werde mit "Geschichte" gehen.
1)
json_encode
ist im PHP-Kern relativ neu.json_encode
wäre in den Anfängen von WordPress nicht zuverlässig gewesen. Es wurde nur in "Kern" PHP in 5.2 gerollt, obwohl es lange vorher als PECL-Erweiterung verfügbar war.Zweitens, wenn Sie ein Objekt wie ein
WP_Query
Objektjson_encode
einspeisen, bekommen Sie einstdClass
Objekt aufjson_decode
.serialize
Ichunserialize
werde das Objekt erhalten.quelle