Dalam usia saya yang kecil dengan WordPress, saya telah melihat WordPress itu sendiri dan plugin yang ramah menggunakan PHP serialize()
dalam menyimpan data ke db dalam banyak kasus. Tetapi dalam pencarian baru-baru ini saya menemukan dukungan komunitas yang serius untuk json_encode()
over the serialize()
.
- Tes yang membuktikan
json_encode()
lebih baik daripadaserialize()
- StackOverflow - Alasan mengapa
json_encode()
dapat digunakan dan mengapa tidak - StackOverflow
Dan saya pribadi menguji array asosiatif dengan keduanya, yang menunjukkan:
serialize()
menyimpan 342 karakterjson_encode()
menyimpan 285 karakter
Kenapa saya menanyakan ini?
Saya sedang mengerjakan proyek sementara saya akan menyimpan bidang meta berulang ke pos. Dimana:
- Data pada dasarnya dalam bahasa Inggris, tetapi kadang-kadang bisa bahasa Bengali
- Data akan berupa array asosiatif, sedalam 3 level (saya harap saya memahami level dengan benar):
array(
1 => array(
'key'=>'value',
'key2'=>'value'
),
2 => array(
'key'=>'value',
'key2'=>'value'
)
)
Saya telah memeriksa bidang postmeta
tabel meta_value
itu a longtext
, itu berarti panjang 4.294.967.295 karakter (4GB).
Jadi saya butuh solusi yang kuat untuk menyimpan barang.
Jawaban:
Saya pikir, tidak 100% yakin bahwa ini adalah alasan sebenarnya para pengembang WP mengambil pendekatan ini, tetapi akal sehat memberi tahu saya bahwa serialisasi mempertahankan tipe variabel dan memiliki mini built dalam deteksi kesalahan, dan json hanya menyimpan nilai string
{ key : value }
, jadi ketika Anda kembali ke PHP Anda harus menebak formatnya, atau membuat parser untuk itu. Ini akan memaksa Anda untuk memiliki dua cara berbeda untuk menangani data Anda: sebelumnya, untuk menyimpan data sebagai json dan setelah mendekode json itu akan kembali sebagai objek yang sama sekali berbeda.Ini adalah alasan utama perbedaan ukuran, PHP tidak hanya menyimpan array; itu menyimpan berapa banyak elemen dalam array ketika serial, jenisnya, dan nilainya.
Anda tidak hanya menyimpan pasangan nilai kunci pada basis data tetapi Anda juga dapat menyimpan objek dengan tipe variabel berbeda.
sumber
Pengkodean JSON diperkenalkan di PHP 5.2, WordPress jauh lebih tua, dan ia lahir (dan dirancang untuk) PHP 4.
Serialisasi data adalah hal yang meresap di WordPress, jadi beralih dari serialisasi PHP ke pengkodean JSON akan berarti masalah kompatibilitas yang sangat besar, dan jika saya tahu sedikit WordPress, itu tidak akan pernah terjadi.
Yang mengatakan, jika Anda berpikir bahwa pengkodean JSON lebih baik untuk Anda daripada serialisasi PHP, gunakan saja.
Jika Anda meneruskan sebuah string (yaitu versi data JSON-encoded Anda) untuk memposting fungsi meta, WordPress tidak akan menyentuhnya, tetapi kemudian Anda perlu mengingat untuk mendekode data JSON saat pengambilan.
Jika ukuran penyimpanan DB sangat penting bagi Anda, itu mungkin layak untuk pekerjaan tambahan, jika tidak biarkan WordPress menggunakan apa yang digunakannya dan tidak peduli.
Mungkin, Anda dapat mengevaluasi apakah itu kasus tabel kustom untuk menyimpan data Anda.
sumber
Saya tergoda untuk menutup ini sebagai "tunduk pada pendapat" tetapi saya pikir ada beberapa jawaban yang bagus untuk pertanyaan itu. Saya akan pergi dengan "sejarah".
1)
json_encode
relatif baru dalam inti PHP.json_encode
tidak akan dapat diandalkan di hari-hari awal WordPress. Itu hanya digulung ke dalam "inti" PHP di 5.2, meskipun itu tersedia sebagai ekstensi PECL jauh sebelum itu.Kedua, jika Anda memberi makan objek seperti
WP_Query
objek kejson_encode
Anda mendapatkanstdClass
objekjson_decode
.serialize
Sayaunserialize
akan melestarikan objek.sumber