Saya Mengganti JSON dengan Format Biner Kustom di PHP
Kami membutuhkan cara yang lebih baik untuk menyimpan rich text untuk aplikasi dan situs web kami.
Awalnya, kami menyimpan HTML mentah di database kami. Kemudian, kami beralih ke JSON untuk memisahkan proses pengeditan dari pencetakan. JSON berfungsi untuk sementara waktu, tetapi menimbulkan masalah baru seiring pertumbuhan kami.
JSON menjadi terlalu lambat untuk kebutuhan kami.
Saat kami perlu mencari dan memperbarui tautan lama, kami harus melakukan parsing dan membangun kembali seluruh array. Proses ini lambat dan tidak efisien. Kami membutuhkan format yang memungkinkan manipulasi data dan streaming yang lebih cepat.
Saya memutuskan untuk membangun format biner kustom menggunakan PHP.
Banyak pengembang mengira PHP tidak dirancang untuk manajemen byte tingkat rendah (low-level). Namun, PHP memiliki fungsi bawaan untuk hal ini:
pack(): Mengonversi angka atau string menjadi byte mentah.unpack(): Mengonversi byte tersebut kembali menjadi angka atau string.
Saya berhenti menggunakan operasi string multibyte. Sebaliknya, saya fokus pada pembacaan potongan (chunk) byte tertentu. Sebagai contoh, integer 64-bit tanpa tanda (unsigned) membutuhkan tepat 8 byte. Presisi adalah kunci saat bekerja dengan data biner.
Saya juga mengubah cara saya menyusun struktur data.
Kebanyakan orang mencoba menyimpan dokumen dalam struktur pohon yang dalam dan bersarang (nested). Ini sering kali merupakan sebuah kesalahan. Saya beralih ke daftar elemen yang datar (flat list) seperti teks, tag, dan daftar. Saya menggunakan pohon offset sederhana untuk membangun kembali HTML. Hal ini membuat tugas-tugas seperti mencari semua tautan atau menghapus HTML menjadi sangat cepat.
Hasil dari 10.000 iterasi menunjukkan pemenang yang jelas:
Encoding JSON Lama: 2,18s Decoding JSON Lama: 0,86s
Encoding Biner Baru: 1,19s Decoding Biner Baru: 0,67s
Format baru ini lebih cepat baik untuk encoding maupun decoding.
Format biner ini lebih besar daripada JSON atau HTML. Ukurannya sekitar dua kali lipat dari JSON. Karena kami menggunakan server-side rendering, peningkatan penyimpanan ini tidak memengaruhi performa kami.
Pertukaran (trade-off) ini sepadan. Sekarang kami dapat mengubah tautan dan membersihkan HTML dengan fungsi yang sederhana dan cepat.
Jika Anda membangun format kustom, buatlah spesifikasi yang jelas. Anda akan membutuhkannya saat kembali ke kode tersebut nanti.
Sumber: https://dev.to/tomj/i-replaced-json-with-a-custom-binary-format-in-php-mok