Nimebadilisha JSON kwa Muundo wa Binary wa Kipekee Katika PHP

Tulihitaji njia bora ya kuhifadhi maandishi yenye utajiri (rich text) kwa ajili ya programu na tovuti zetu.

Mwanzoni, tulihifadhi HTML ghafi kwenye hifadhidata yetu. Baadaye, tulibadilishia kwenda JSON ili kutenganisha uhariri na uchapishaji. JSON ilifanya kazi kwa muda, lakini ilileta matatizo mapya tulipokuwa tukikua.

JSON ilianza kuwa nzito sana kwa mahitaji yetu.

Tulipohitaji kutafuta na kusasisha viungo (links) vya zamani, ilibidi tuchambue (parse) na kujenga upya array nzima. Mchakato huu ulikuwa wa polepole na usio na ufanisi. Tulihitaji muundo unaoruhusu uhandisi wa data na utiririshaji (streaming) wa haraka zaidi.

Niliamua kutengeneza muundo wa binary wa kipekee kwa kutumia PHP.

Waendelezaji wengi wanafikiri kuwa PHP haijatengenezwa kwa ajili ya usimamizi wa byte wa kiwango cha chini (low-level byte management). Hata hivyo, PHP ina kazi (functions) za ndani kwa ajili ya hili:

  • pack(): Inabadilisha namba au maandishi (strings) kuwa byte ghafi.
  • unpack(): Inabadilisha byte hizo kurudi kuwa namba au maandishi.

Niliacha kutumia operesheni za maandishi za multibyte. Badala yake, nilijikita katika kusoma vipande maalum vya byte. Kwa mfano, namba nzima ya unsigned ya bit 64 inahitaji byte 8 kamili. Usahihi ni muhimu unapofanya kazi na data za binary.

Pia nilibadilisha jinsi nilivyopanga muundo wa data.

Watu wengi hujaribu kuhifadhi nyaraka katika muundo wa mti uliolala ndani (nested tree structure). Hii mara nyingi ni kosa. Nilibadilishia kwenda orodha bapa (flat list) ya vipengele kama maandishi, lebo (tags), na orodha. Ninatumia mti rahisi wa offsets ili kujenga upya HTML. Hii inafanya kazi kama kutafuta viungo vyote au kuondoa HTML kuwa ya haraka sana.

Matokeo kutoka kwenye mzunguko (loops) 10,000 yanaonyesha mshindi wa wazi:

Uandishi wa JSON wa Zamani: 2.18s Usomaji wa JSON wa Zamani: 0.86s

Uandishi wa Binary mpya: 1.19s Usomaji wa Binary mpya: 0.67s

Muundo mpya ni wa haraka zaidi kwa uandishi na usomaji wote.

Muundo wa binary ni mkubwa kuliko JSON au HTML. Unachukua nafasi karibu mara mbili ya JSON. Kwa kuwa tunatumia server-side rendering, ongezeko hili la uhifadhi haliharibu utendaji wetu.

Mabadiliko haya yanastahili. Sasa tunaweza kubadilisha viungo na kusafisha HTML kwa kutumia kazi rahisi na za haraka.

Ikiwa unatengeneza muundo wa kipekee, andika maelezo (specification) ya wazi. Utahitaji maelezo hayo utaporudi kwenye kodi baadaye.

Chanzo: https://dev.to/tomj/i-replaced-json-with-a-custom-binary-format-in-php-mok