Nimebadilisha JSON na Muundo wa Binari wa Kipekee katika PHP
Tunahitaji kuhifadhi maandishi tajiri (rich text) kwa ajili ya programu za wavuti na simu.
Kwa miaka mingi, tulitumia HTML tupu kwenye hifadhidata yetu. Baadaye, tulihamia kwenye JSON ili kutenganisha uhariri na uchapishaji.
JSON ikawa tatizo kadiri data yetu ilivyokua. Ili kubadilisha kiungo kimoja tu, ilibidi tuchanganue (parse), tujenge upya, na tuugeuze array nzima kuwa string. Mchakato huu ulikuwa wa polepole na usio na ufanisi.
Niliamua kutengeneza muundo wa binari wa kipekee kwa kutumia PHP.
Hapa kuna sababu nilizofanya mabadiliko hayo:
- Kasi: Kuchanganua na kutafuta kulikuwa haraka zaidi.
- Udhibiti: Naweza kurekebisha byte maalum bila kupakia kila kitu kwenye kumbukumbu.
- Muundo: Nilihamia kutoka kwenye mti uliolainishwa (nested tree) kwenda kwenye orodha bapa ya vipengele (flat list of elements).
Majukumu mengi ya maandishi tajiri hayahitaji mti tata. Mara nyingi unahitaji tu kutafuta maandishi au lebo (tags) maalum. Muundo bapa wa vipengele wenye mti rahisi wa offsets unafanya kazi vizuri zaidi.
PHP si lugha ya kiwango cha chini. Haikuimarishwa kwa ajili ya urekebishaji wa byte kama Zig au C. Hata hivyo, PHP ina zana sahihi:
pack()hugeuza namba au string kuwa byte ghafi.unpack()hugeuza byte hizo kuwa data inayoweza kutumika tena.
Niliacha kutumia kazi za string za multibyte. Badala yake, nilisoma vipande maalum vya byte. Kwa mfano, namba nzima ya unsigned 64-bit inahitaji byte 8 kamili.
Matokeo baada ya mizunguko 10,000:
Uwekaji wa JSON wa zamani: 2.18s Ufunguaji wa JSON wa zamani: 0.86s Uwekaji wa Binari mpya: 1.19s Ufunguaji wa Binari mpya: 0.67s
Muundo wa binari ni wa haraka zaidi. Pia ni mkubwa zaidi. Ni mara 2 ya ukubwa wa JSON na mara 3 ya ukubwa wa HTML. Kwa kuwa tunatumia server-side rendering, hili halitujali.
Ukijenga muundo wa kipekee, fuata sheria moja: andika maelezo ya kiufundi (specification). Ainisha muundo wako kwa uwazi. Utajuta usipofanya hivyo.
Ilichukua wiki moja ya kazi. Ilikuwa inastahili.
Chanzo: https://dev.to/tomj/i-replaced-json-with-a-custom-binary-format-in-php-mok