ਮੈਂ PHP ਵਿੱਚ JSON ਦੀ ਜਗ੍ਹਾ ਇੱਕ ਕਸਟਮ ਬਾਈਨਰੀ ਫਾਰਮੈਟ ਦੀ ਵਰਤੋਂ ਕੀਤੀ

ਸਾਨੂੰ ਵੈੱਬ ਅਤੇ ਮੋਬਾਈਲ ਐਪਸ ਲਈ ਰਿਚ ਟੈਕਸਟ (rich text) ਸਟੋਰ ਕਰਨ ਦੀ ਲੋੜ ਹੈ।

ਸਾਲਾਂ ਤੱਕ, ਅਸੀਂ ਆਪਣੇ ਡੇਟਾਬੇਸ ਵਿੱਚ ਸ਼ੁੱਧ HTML ਦੀ ਵਰਤੋਂ ਕੀਤੀ। ਬਾਅਦ ਵਿੱਚ, ਅਸੀਂ ਐਡੀਟਿੰਗ ਨੂੰ ਪ੍ਰਿੰਟਿੰਗ ਤੋਂ ਵੱਖ ਕਰਨ ਲਈ JSON 'ਤੇ ਸਵਿਚ ਕਰ ਲਿਆ।

ਜਿਵੇਂ-ਜਿਵੇਂ ਸਾਡਾ ਡੇਟਾ ਵਧਿਆ, JSON ਇੱਕ ਸਮੱਸਿਆ ਬਣ ਗਿਆ। ਇੱਕ ਸਿੰਗਲ ਲਿੰਕ ਨੂੰ ਬਦਲਣ ਲਈ, ਸਾਨੂੰ ਪੂਰੇ ਐਰੇ (array) ਨੂੰ parse, rebuild ਅਤੇ stringify ਕਰਨਾ ਪੈਂਦਾ ਸੀ। ਇਹ ਪ੍ਰਕਿਰਿਆ ਹੌਲੀ ਅਤੇ ਅਕੁਸ਼ਲ ਸੀ।

ਮੈਂ PHP ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਇੱਕ ਕਸਟਮ ਬਾਈਨਰੀ ਫਾਰਮੈਟ ਬਣਾਉਣ ਦਾ ਫੈਸਲਾ ਕੀਤਾ।

ਇੱਥੇ ਕਾਰਨ ਦਿੱਤੇ ਗਏ ਹਨ ਕਿ ਮੈਂ ਇਹ ਬਦਲਾਅ ਕਿਉਂ ਕੀਤਾ:

  • ਰਫਤਾਰ: Parsing ਅਤੇ ਸਰਚਿੰਗ ਬਹੁਤ ਤੇਜ਼ ਹੋ ਗਈ।
  • ਕੰਟਰੋਲ: ਮੈਂ ਸਭ ਕੁਝ ਮੈਮੋਰੀ ਵਿੱਚ ਲੋਡ ਕੀਤੇ ਬਿਨਾਂ ਖਾਸ ਬਾਈਟਸ (bytes) ਵਿੱਚ ਤਬਦੀਲੀ ਕਰ ਸਕਦਾ ਹਾਂ।
  • ਬਣਤਰ: ਮੈਂ ਇੱਕ nested tree ਤੋਂ ਤੱਤਾਂ (elements) ਦੀ ਇੱਕ ਫਲੈਟ ਲਿਸਟ (flat list) ਵੱਲ ਵਧ ਗਿਆ।

ਜ਼ਿਆਦਾਤਰ ਰਿਚ ਟੈਕਸਟ ਕੰਮਾਂ ਲਈ ਇੱਕ ਗੁੰਝਲਦਾਰ tree ਦੀ ਲੋੜ ਨਹੀਂ ਹੁੰਦੀ। ਤੁਹਾਨੂੰ ਅਕਸਰ ਸਿਰਫ਼ ਟੈਕਸਟ ਜਾਂ ਖਾਸ ਟੈਗਸ ਲੱਭਣ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ। ਆਫਸੈਟਸ (offsets) ਦੇ ਇੱਕ ਸਧਾਰਨ tree ਦੇ ਨਾਲ ਤੱਤਾਂ ਦੀ ਇੱਕ ਫਲੈਟ ਬਣਤਰ ਵਧੇਰੇ ਵਧੀਆ ਕੰਮ ਕਰਦੀ ਹੈ।

PHP ਕੋਈ low-level ਭਾਸ਼ਾ ਨਹੀਂ ਹੈ। ਇਹ Zig ਜਾਂ C ਵਾਂਗ byte manipulation ਲਈ ਅਨੁਕੂਲਿਤ (optimized) ਨਹੀਂ ਹੈ। ਹਾਲਾਂਕਿ, PHP ਕੋਲ ਸਹੀ ਟੂਲ ਹਨ:

  • pack() ਨੰਬਰਾਂ ਜਾਂ ਸਟ੍ਰਿੰਗਾਂ ਨੂੰ raw bytes ਵਿੱਚ ਬਦਲ ਦਿੰਦਾ ਹੈ।
  • unpack() ਉਹਨਾਂ ਬਾਈਟਸ ਨੂੰ ਵਾਪਸ ਵਰਤੋਂ ਯੋਗ ਡੇਟਾ ਵਿੱਚ ਬਦਲ ਦਿੰਦਾ ਹੈ।

ਮੈਂ multibyte string ਫੰਕਸ਼ਨਾਂ ਦੀ ਵਰਤੋਂ ਕਰਨਾ ਬੰਦ ਕਰ ਦਿੱਤਾ। ਇਸ ਦੀ ਬਜਾਏ, ਮੈਂ ਬਾਈਟਸ ਦੇ ਖਾਸ ਚੰਕਸ (chunks) ਪੜ੍ਹਦਾ ਹਾਂ। ਉਦਾਹਰਨ ਲਈ, ਇੱਕ unsigned 64-bit integer ਨੂੰ ਬਿਲਕੁਲ 8 ਬਾਈਟਸ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ।

10,000 ਲੂਪਸ (loops) ਤੋਂ ਬਾਅਦ ਦੇ ਨਤੀਜੇ:

Old JSON encoding: 2.18s Old JSON decoding: 0.86s New Binary encoding: 1.19s New Binary decoding: 0.67s

ਬਾਈਨਰੀ ਫਾਰਮੈਟ ਤੇਜ਼ ਹੈ। ਇਹ ਵੱਡਾ ਵੀ ਹੈ। ਇਹ JSON ਦੇ ਆਕਾਰ ਤੋਂ 2 ਗੁਣਾ ਅਤੇ HTML ਦੇ ਆਕਾਰ ਤੋਂ 3 ਗੁਣਾ ਹੈ। ਕਿਉਂਕਿ ਅਸੀਂ server-side rendering ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹਾਂ, ਇਸ ਲਈ ਇਹ ਸਾਡੇ ਲਈ ਮਾਇਨੇ ਨਹੀਂ ਰੱਖਦਾ।

ਜੇਕਰ ਤੁਸੀਂ ਇੱਕ ਕਸਟਮ ਫਾਰਮੈਟ ਬਣਾਉਂਦੇ ਹੋ, ਤਾਂ ਇੱਕ ਨਿਯਮ ਦੀ ਪਾਲਣਾ ਕਰੋ: ਇੱਕ specification ਲਿਖੋ। ਆਪਣੇ ਫਾਰਮੈਟ ਨੂੰ ਸਪੱਸ਼ਟ ਰੂਪ ਵਿੱਚ ਦਸਤਾਵੇਜ਼ੀ (document) ਕਰੋ। ਜੇਕਰ ਤੁਸੀਂ ਅਜਿਹਾ ਨਹੀਂ ਕਰਦੇ ਹੋ, ਤਾਂ ਤੁਹਾਨੂੰ ਪਛਤਾਵਾ ਹੋਵੇਗਾ।

ਇਸ ਵਿੱਚ ਇੱਕ ਹਫ਼ਤੇ ਦਾ ਕੰਮ ਲੱਗਿਆ। ਇਹ ਬਹੁਤ ਫਾਇਦੇਮੰਦ ਰਿਹਾ।

ਸਰੋਤ: https://dev.to/tomj/i-replaced-json-with-a-custom-binary-format-in-php-mok