J'ai remplacé le JSON par un format binaire personnalisé en PHP
Nous devons stocker du texte enrichi pour des applications web et mobiles.
Pendant des années, nous avons utilisé du HTML pur dans notre base de données. Plus tard, nous sommes passés au JSON pour séparer l'édition de l'impression.
Le JSON est devenu un problème à mesure que nos données augmentaient. Pour modifier un seul lien, nous devions analyser, reconstruire et transformer en chaîne l'intégralité du tableau. Ce processus était lent et inefficace.
J'ai décidé de créer un format binaire personnalisé en utilisant PHP.
Voici pourquoi j'ai fait ce changement :
- Vitesse : l'analyse et la recherche sont devenues beaucoup plus rapides.
- Contrôle : je peux manipuler des octets spécifiques sans tout charger en mémoire.
- Structure : je suis passé d'un arbre imbriqué à une liste plate d'éléments.
La plupart des tâches de texte enrichi n'ont pas besoin d'un arbre complexe. On a souvent seulement besoin de trouver du texte ou des balises spécifiques. Une structure plate d'éléments avec un simple arbre de décalages fonctionne mieux.
PHP n'est pas un langage de bas niveau. Il n'est pas optimisé pour la manipulation d'octets comme Zig ou C. Cependant, PHP possède les bons outils :
pack()transforme des nombres ou des chaînes en octets bruts.unpack()transforme ces octets en données utilisables.
J'ai arrêté d'utiliser les fonctions de chaînes multi-octets. À la place, je lis des blocs d'octets spécifiques. Par exemple, un entier non signé de 64 bits nécessite exactement 8 octets.
Les résultats après 10 000 boucles :
Ancien encodage JSON : 2,18 s Ancien décodage JSON : 0,86 s Nouvel encodage binaire : 1,19 s Nouveau décodage binaire : 0,67 s
Le format binaire est plus rapide. Il est aussi plus volumineux. Il fait 2 fois la taille du JSON et 3 fois celle du HTML. Comme nous utilisons le rendu côté serveur, cela n'a pas d'importance pour nous.
Si vous créez un format personnalisé, suivez une règle : rédigez une spécification. Documentez clairement votre format. Vous le regretterez si vous ne le faites pas.
Cela a pris une semaine de travail. Cela en valait la peine.
Source : https://dev.to/tomj/i-replaced-json-with-a-custom-binary-format-in-php-mok