મેં PHP માં JSON ને કસ્ટમ બાઈનરી ફોર્મેટ સાથે બદલી નાખ્યું
અમને અમારા એપ્સ અને વેબસાઇટ્સ માટે રિચ ટેક્સ્ટ (rich text) સ્ટોર કરવા માટે વધુ સારા રસ્તાની જરૂર હતી.
શરૂઆતમાં, અમે અમારા ડેટાબેઝમાં રો (raw) HTML સ્ટોર કરતા હતા. પાછળથી, એડિટિંગ અને પ્રિન્ટિંગને અલગ કરવા માટે અમે JSON નો ઉપયોગ કરવાનું શરૂ કર્યું. JSON થોડા સમય માટે કામ કરી ગયું, પરંતુ જેમ જેમ અમારો વિકાસ થયો તેમ તેમ તેણે નવી સમસ્યાઓ ઊભી કરી.
JSON અમારી જરૂરિયાતો માટે ખૂબ જ ધીમું બની ગયું.
જ્યારે અમારે જૂની લિંક્સ શોધવાની અને અપડેટ કરવાની જરૂર પડી, ત્યારે અમારે આખા એરે (arrays) ને પાર્સ (parse) કરવા પડતા અને ફરીથી બનાવવા પડતા હતા. આ પ્રક્રિયા ધીમી અને બિનકાર્યક્ષમ હતી. અમને એવા ફોર્મેટની જરૂર હતી જે ઝડપી ડેટા મેનિપ્યુલેશન અને સ્ટ્રીમિંગની મંજૂરી આપે.
મેં PHP નો ઉપયોગ કરીને એક કસ્ટમ બાઈનરી ફોર્મેટ બનાવવાનું નક્કી કર્યું.
ઘણા ડેવલપર્સ માને છે કે PHP લો-લેવલ બાઈટ મેનેજમેન્ટ (low-level byte management) માટે નથી બનેલું. જોકે, PHP માં આ માટે ઇન-બિલ્ટ ફંક્શન્સ છે:
pack(): નંબર્સ અથવા સ્ટ્રિંગ્સને રો (raw) બાઈટ્સમાં રૂપાંતરિત કરે છે.unpack(): તે બાઈટ્સને ફરીથી નંબર્સ અથવા સ્ટ્રિંગ્સમાં રૂપાંતરિત કરે છે.
મેં મલ્ટીબાઈટ સ્ટ્રિંગ ઓપરેશન્સનો ઉપયોગ કરવાનું બંધ કરી દીધું. તેના બદલે, મેં બાઈટ્સના ચોક્કસ ચંક્સ (chunks) વાંચવા પર ધ્યાન કેન્દ્રિત કર્યું. ઉદાહરણ તરીકે, અનસાઈન્ડ 64-bit ઇન્ટિજરને બરાબર 8 બાઈટ્સની જરૂર હોય છે. બાઈનરી ડેટા સાથે કામ કરતી વખતે ચોકસાઈ (precision) ખૂબ મહત્વની છે.
મેં ડેટાનું માળખું (structure) કેવી રીતે બનાવવું તે પણ બદલી નાખ્યું.
મોટાભાગના લોકો ડોક્યુમેન્ટ્સને ઊંડા, નેસ્ટેડ ટ્રી સ્ટ્રક્ચરમાં રાખવાનો પ્રયાસ કરે છે. આ ઘણીવાર ભૂલભરેલું હોય છે. મેં ટેક્સ્ટ, ટેગ્સ અને લિસ્ટ જેવા એલિમેન્ટ્સની ફ્લેટ લિસ્ટ (flat list) પર સ્વિચ કર્યું. હું HTML ને ફરીથી બનાવવા માટે ઓફસેટ્સ (offsets) ના સાદા ટ્રીનો ઉપયોગ કરું છું. આનાથી બધી લિંક્સ શોધવી અથવા HTML દૂર કરવા જેવા કાર્યો ખૂબ જ ઝડપી બને છે.
10,000 લૂપ્સના પરિણામો એક સ્પષ્ટ વિજેતા દર્શાવે છે:
જૂનું JSON એન્કોડિંગ: 2.18s જૂનું JSON ડિકોડિંગ: 0.86s
નવું બાઈનરી એન્કોડિંગ: 1.19s નવું બાઈનરી ડિકોડિંગ: 0.67s
નવું ફોર્મેટ એન્કોડિંગ અને ડિકોડિંગ બંને માટે ઝડપી છે.
બાઈનરી ફોર્મેટ JSON અથવા HTML કરતા મોટું છે. તે JSON કરતા લગભગ બમણી જગ્યા રોકે છે. કારણ કે અમે સર્વર-સાઇડ રેન્ડરિંગનો ઉપયોગ કરીએ છીએ, તેથી સ્ટોરેજમાં આ વધારો અમારા પર્ફોર્મન્સને અસર કરતો નથી.
આ બદલાવ (trade-off) ફાયદાકારક છે. હવે અમે સરળ અને ઝડપી ફંક્શન્સ સાથે લિંક્સ બદલી શકીએ છીએ અને HTML ક્લીન કરી શકીએ છીએ.
જો તમે કસ્ટમ ફોર્મેટ બનાવો છો, તો સ્પષ્ટ સ્પષ્ટીકરણ (specification) લખો. જ્યારે તમે પછીથી કોડ પર પાછા આવશો ત્યારે તેની જરૂર પડશે.
સ્ત્રોત: https://dev.to/tomj/i-replaced-json-with-a-custom-binary-format-in-php-mok