ਮੈਂ PHP ਵਿੱਚ JSON ਨੂੰ ਇੱਕ ਕਸਟਮ ਬਾਈਨਰੀ ਫਾਰਮੈਟ ਨਾਲ ਬਦਲ ਦਿੱਤਾ
ਸਾਨੂੰ ਆਪਣੇ ਐਪਸ ਅਤੇ ਵੈੱਬਸਾਈਟਾਂ ਲਈ ਰਿਚ ਟੈਕਸਟ (rich text) ਨੂੰ ਸਟੋਰ ਕਰਨ ਲਈ ਇੱਕ ਬਿਹਤਰ ਤਰੀਕੇ ਦੀ ਲੋੜ ਸੀ।
ਸ਼ੁਰੂ ਵਿੱਚ, ਅਸੀਂ ਆਪਣੇ ਡੇਟਾਬੇਸ ਵਿੱਚ raw HTML ਸਟੋਰ ਕਰਦੇ ਸੀ। ਬਾਅਦ ਵਿੱਚ, ਅਸੀਂ ਐਡੀਟਿੰਗ ਨੂੰ ਪ੍ਰਿੰਟਿੰਗ ਤੋਂ ਵੱਖ ਕਰਨ ਲਈ JSON ਦੀ ਵਰਤੋਂ ਕਰਨੀ ਸ਼ੁਰੂ ਕਰ ਦਿੱਤੀ। JSON ਕੁਝ ਸਮੇਂ ਲਈ ਤਾਂ ਠੀਕ ਰਿਹਾ, ਪਰ ਜਿਵੇਂ-ਜਿਵੇਂ ਸਾਡਾ ਕੰਮ ਵਧਿਆ, ਇਸ ਨੇ ਨਵੀਆਂ ਸਮੱਸਿਆਵਾਂ ਪੈਦਾ ਕਰ ਦਿੱਤੀਆਂ।
JSON ਸਾਡੀਆਂ ਲੋੜਾਂ ਲਈ ਬਹੁਤ ਹੌਲੀ ਹੋ ਗਿਆ ਸੀ।
ਜਦੋਂ ਸਾਨੂੰ ਪੁਰਾਣੇ ਲਿੰਕਾਂ ਨੂੰ ਲੱਭਣ ਅਤੇ ਅੱਪਡੇਟ ਕਰਨ ਦੀ ਲੋੜ ਪੈਂਦੀ ਸੀ, ਤਾਂ ਸਾਨੂੰ ਪੂਰੇ arrays ਨੂੰ parse ਅਤੇ ਮੁੜ ਬਣਾਉਣਾ ਪੈਂਦਾ ਸੀ। ਇਹ ਪ੍ਰਕਿਰਿਆ ਹੌਲੀ ਅਤੇ ਅਕੁਸ਼ਲ ਸੀ। ਸਾਨੂੰ ਇੱਕ ਅਜਿਹੇ ਫਾਰਮੈਟ ਦੀ ਲੋੜ ਸੀ ਜੋ ਤੇਜ਼ ਡੇਟਾ manipulation ਅਤੇ streaming ਦੀ ਇਜਾਜ਼ਤ ਦੇਵੇ।
ਮੈਂ PHP ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਇੱਕ ਕਸਟਮ ਬਾਈਨਰੀ ਫਾਰਮੈਟ ਬਣਾਉਣ ਦਾ ਫੈਸਲਾ ਕੀਤਾ।
ਬਹੁਤ ਸਾਰੇ ਡਿਵੈਲਪਰ ਸੋਚਦੇ ਹਨ ਕਿ PHP low-level byte management ਲਈ ਨਹੀਂ ਬਣੀ ਹੈ। ਹਾਲਾਂਕਿ, PHP ਵਿੱਚ ਇਸ ਲਈ built-in ਫੰਕਸ਼ਨ ਹਨ:
- pack(): ਨੰਬਰਾਂ ਜਾਂ ਸਟ੍ਰਿੰਗਾਂ ਨੂੰ raw bytes ਵਿੱਚ ਬਦਲਦਾ ਹੈ।
- unpack(): ਉਹਨਾਂ bytes ਨੂੰ ਵਾਪਸ ਨੰਬਰਾਂ ਜਾਂ ਸਟ੍ਰਿੰਗਾਂ ਵਿੱਚ ਬਦਲਦਾ ਹੈ।
ਮੈਂ multibyte string operations ਦੀ ਵਰਤੋਂ ਕਰਨਾ ਬੰਦ ਕਰ ਦਿੱਤਾ। ਇਸ ਦੀ ਬਜਾਏ, ਮੈਂ bytes ਦੇ ਖਾਸ chunks ਨੂੰ ਪੜ੍ਹਨ 'ਤੇ ਧਿਆਨ ਦਿੱਤਾ। ਉਦਾਹਰਨ ਲਈ, ਇੱਕ unsigned 64-bit integer ਨੂੰ ਬਿਲਕੁਲ 8 bytes ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ। ਬਾਈਨਰੀ ਡੇਟਾ ਨਾਲ ਕੰਮ ਕਰਦੇ ਸਮੇਂ precision ਬਹੁਤ ਮਹੱਤਵਪੂਰਨ ਹੈ।
ਮੈਂ ਡੇਟਾ ਦੇ structure ਨੂੰ ਵੀ ਬਦਲ ਦਿੱਤਾ।
ਜ਼ਿਆਦਾਤਰ ਲੋਕ ਦਸਤਾਵੇਜ਼ਾਂ ਨੂੰ ਇੱਕ ਡੂੰਘੇ, nested tree structure ਵਿੱਚ ਰੱਖਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰਦੇ ਹਨ। ਇਹ ਅਕਸਰ ਇੱਕ ਗਲਤੀ ਹੁੰਦੀ ਹੈ। ਮੈਂ text, tags, ਅਤੇ lists ਵਰਗੇ elements ਦੀ ਇੱਕ flat list ਦੀ ਵਰਤੋਂ ਕੀਤੀ। ਮੈਂ HTML ਨੂੰ ਮੁੜ ਬਣਾਉਣ ਲਈ offsets ਦੇ ਇੱਕ ਸਧਾਰਨ tree ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹਾਂ। ਇਸ ਨਾਲ ਸਾਰੇ ਲਿੰਕ ਲੱਭਣ ਜਾਂ HTML ਨੂੰ ਹਟਾਉਣ ਵਰਗੇ ਕੰਮ ਬਹੁਤ ਤੇਜ਼ ਹੋ ਜਾਂਦੇ ਹਨ।
10,000 loops ਦੇ ਨਤੀਜੇ ਇੱਕ ਸਪੱਸ਼ਟ ਜੇਤੂ ਦਿਖਾਉਂਦੇ ਹਨ:
Old JSON Encoding: 2.18s Old JSON Decoding: 0.86s
New Binary Encoding: 1.19s New Binary Decoding: 0.67s
ਨਵਾਂ ਫਾਰਮੈਟ encoding ਅਤੇ decoding ਦੋਵਾਂ ਲਈ ਤੇਜ਼ ਹੈ।
ਬਾਈਨਰੀ ਫਾਰਮੈਟ JSON ਜਾਂ HTML ਨਾਲੋਂ ਵੱਡਾ ਹੈ। ਇਹ JSON ਦੇ ਲਗਭਗ ਦੁੱਗਣੇ ਸਪੇਸ ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ। ਕਿਉਂਕਿ ਅਸੀਂ server-side rendering ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹਾਂ, ਇਸ ਲਈ ਸਟੋਰੇਜ ਵਿੱਚ ਇਹ ਵਾਧਾ ਸਾਡੀ performance ਨੂੰ ਪ੍ਰਭਾਵਿਤ ਨਹੀਂ ਕਰਦਾ।
ਇਹ trade-off ਫਾਇਦੇਮੰਦ ਹੈ। ਹੁਣ ਅਸੀਂ ਸਧਾਰਨ ਅਤੇ ਤੇਜ਼ ਫੰਕਸ਼ਨਾਂ ਨਾਲ ਲਿੰਕ ਬਦਲ ਸਕਦੇ ਹਾਂ ਅਤੇ HTML ਨੂੰ ਸਾਫ਼ ਕਰ ਸਕਦੇ ਹਾਂ।
ਜੇਕਰ ਤੁਸੀਂ ਇੱਕ ਕਸਟਮ ਫਾਰਮੈਟ ਬਣਾਉਂਦੇ ਹੋ, ਤਾਂ ਇੱਕ ਸਪੱਸ਼ਟ specification ਲਿਖੋ। ਜਦੋਂ ਤੁਸੀਂ ਬਾਅਦ ਵਿੱਚ ਕੋਡ 'ਤੇ ਵਾਪਸ ਆਓਗੇ, ਤਾਂ ਤੁਹਾਨੂੰ ਇਸਦੀ ਲੋੜ ਪਵੇਗੀ।
Source: https://dev.to/tomj/i-replaced-json-with-a-custom-binary-format-in-php-mok