A team shipping a 5.5 MB Python runtime to browsers discovered that 69 % of the errors logged during a recent sprint fell under a single, misleading title, and 89 % of those were actually network timeouts. The mis-reporting sent developers down the wrong debugging path and left a sizable slice of users with silent download failures—a problem any web-app that bundles large assets can soon replicate.
ਡੈਸ਼ਬੋਰਡ ਨੇ ਗੁੰਮਰਾਹ ਕੀਤਾ
ਐਰਰ-ਟਰੈਕਿੰਗ ਸਿਸਟਮ ਘਟਨਾਵਾਂ ਨੂੰ ਆਪਣੇ ਆਪ ਉਸ ਕੋਡ ਲੋਕੇਸ਼ਨ (code location) ਦੇ ਅਧਾਰ 'ਤੇ ਗਰੁੱਪ ਕਰਦਾ ਹੈ ਜਿੱਥੇ ਉਹ ਪਹਿਲੀ ਵਾਰ ਦਿਖਾਈ ਦਿੰਦੇ ਹਨ। ਨਤੀਜੇ ਵਜੋਂ ਮਿਲਿਆ ਸਿਰਲੇਖ runtime loader ਵਿੱਚ ਇੱਕ ਸਧਾਰਨ ਬੱਗ (bug) ਵਾਂਗ ਲੱਗ ਰਿਹਾ ਸੀ, ਇਸ ਲਈ ਸਪ੍ਰਿੰਟ ਦਾ ਸਮਾਂ ਉਹਨਾਂ ਕੋਡ ਪਾਥਾਂ (code paths) ਦੀ ਭਾਲ ਵਿੱਚ ਬੀਤ ਗਿਆ ਜੋ ਕਦੇ ਟਾਈਮਆਊਟ ਹੀ ਨਹੀਂ ਹੋਏ ਸਨ। ਜਦੋਂ ਟੀਮ ਨੇ ਅੰਡਰਲਾਈਂਗ ਮੈਟਾਡਾਟਾ (metadata) ਦੀ ਜਾਂਚ ਕੀਤੀ, ਤਾਂ ਅਸਲੀ ਤਸਵੀਰ ਸਾਹਮਣੇ ਆਈ: ਜ਼ਿਆਦਾਤਰ ਫੇਲ੍ਹ ਹੋਣ ਦੇ ਕਾਰਨ ਕੋਈ ਬੱਗ ਨਹੀਂ ਸਨ, ਸਗੋਂ ਰੁਕੇ ਹੋਏ ਨੈੱਟਵਰਕ ਕਨੈਕਸ਼ਨ ਸਨ ਜਿਨ੍ਹਾਂ ਕਾਰਨ ਟਾਈਮਆਊਟ ਹੋ ਗਿਆ ਸੀ।
ਸਿੱਖਿਆ (Takeaway): ਇੱਕ ਐਰਰ ਸਿਰਲੇਖ ਸਿਰਫ਼ ਸਹੂਲਤ ਲਈ ਹੁੰਦਾ ਹੈ, ਨਾ ਕਿ ਨਿਸ਼ਾਨਦੇਹੀ (diagnosis) ਲਈ। ਇਹ ਪੁਸ਼ਟੀ ਕਰਨ ਲਈ ਕਿ ਹੈੱਡਲਾਈਨ ਅਸਲ ਵਿੱਚ ਕੀ ਦਰਸਾ ਰਹੀ ਹੈ, ਸਮੇਂ-ਸਮੇਂ 'ਤੇ ਕੱਚੇ ਡੇਟਾ (raw data) ਦੀ ਡੂੰਘਾਈ ਨਾਲ ਜਾਂਚ ਕਰੋ।
ਬ੍ਰਾਊਜ਼ਰ ਕਨੈਕਸ਼ਨ API ਨੇ ਇੱਕ ਪਲੇਸਹੋਲਡਰ ਦਿੱਤਾ
ਹੌਲੀ ਇੰਟਰਨੈੱਟ ਵਾਲੇ ਉਪਭੋਗਤਾਵਾਂ ਨੂੰ 5.5 MB ਡਾਊਨਲੋਡ ਵਿੱਚ ਫਸਾਉਣ ਤੋਂ ਬਚਣ ਲਈ, ਡਿਵੈਲਪਰਾਂ ਨੇ ਬ੍ਰਾਊਜ਼ਰ ਦੇ Network Information API (navigator.connection) ਦੀ ਸਲਾਹ ਲਈ। API ਨੇ ਹਰ ਪਹਿਲੀ ਵਾਰ ਆਉਣ ਵਾਲੇ ਵਿਜ਼ਟਰ ਲਈ 1.7 Mbps ਦੀ ਸਥਿਰ ਬੈਂਡਵਿਡਥ (bandwidth) ਦੱਸੀ।
ਜਦੋਂ ਬ੍ਰਾਊਜ਼ਰ ਕੋਲ ਕਿਸੇ ਨਵੇਂ ਉਪਭੋਗਤਾ ਲਈ ਕੋਈ ਪੁਰਾਣਾ ਡੇਟਾ ਨਹੀਂ ਹੁੰਦਾ, ਤਾਂ ਉਹ ਇੱਕ ਡਿਫੌਲਟ (default) ਮੁੱਲ ਦਿੰਦੇ ਹਨ। ਉਹ ਡਿਫੌਲਟ ਸਿਰਫ਼ ਇੱਕ ਸੰਕੇਤ ਹੈ, ਨਾ ਕਿ ਨਿਸ਼ਚਿਤ ਗਤੀ। ਜਦੋਂ ਹਰ ਨਵੇਂ ਸੈਸ਼ਨ ਲਈ ਉਹੀ ਪਲੇਸਹੋਲਡਰ ਦਿਖਾਈ ਦਿੰਦਾ ਹੈ, ਤਾਂ ਇਹ ਸੰਕੇਤ ਦਿੰਦਾ ਹੈ ਕਿ API ਅਜੇ ਉਸ ਆਡੀਅੰਸ ਲਈ ਸਹੀ ਤਰ੍ਹਾਂ ਕੈਲੀਬਰੇਟ (calibrate) ਨਹੀਂ ਹੋਇਆ ਹੈ।
ਸਿੱਖਿਆ (Takeaway): ਕਿਸੇ ਵੀ ਅਜਿਹੇ ਨੈੱਟਵਰਕ ਸੰਕੇਤ ਨੂੰ ਸਿਰਫ਼ ਇੱਕ ਫਾਲਬੈਕ (fallback) ਵਜੋਂ ਲਓ ਜੋ ਕਦੇ ਬਦਲਦਾ ਨਹੀਂ ਹੈ, ਨਾ ਕਿ ਇੱਕ ਨਿਸ਼ਚਿਤ ਮੈਟ੍ਰਿਕ (metric) ਵਜੋਂ।
ਇੱਕ ਵਾਰੀ ਦੇ ਸਨੈਪਸ਼ਾਟ ਭਰੋਸੇਯੋਗ ਨਹੀਂ ਹੁੰਦੇ
ਭਰੋਸੇਯੋਗ ਨਾ ਹੋਣ ਵਾਲੇ ਬੈਂਡਵਿਡਥ ਸੰਕੇਤ ਨੂੰ ਛੱਡਣ ਤੋਂ ਬਾਅਦ, ਟੀਮ ਨੇ ਇੱਕ ਵੱਖਰੇ ਸੰਕੇਤ ਦੀ ਵਰਤੋਂ ਕੀਤੀ ਜੋ ਉਹਨਾਂ ਦੇ ਟੈਸਟ ਸੂਟ (test suite) ਵਿੱਚ ਕੰਮ ਕਰਦਾ ਲੱਗ ਰਿਹਾ ਸੀ। ਇੱਕ ਟੈਸਟ ਰਨ ਸਫਲ ਰਿਹਾ, ਪਰ ਟੈਸਟ ਨੂੰ ਤਿੰਨ ਵਾਰ ਦੁਹਰਾਉਣ 'ਤੇ ਹਰ ਵਾਰ ਫੇਲ੍ਹ ਹੋ ਗਿਆ। ਨੈੱਟਵਰਕ ਦੀ ਗਤੀ ਲਗਾਤਾਰ ਬਦਲਦੀ ਰਹਿੰਦੀ ਹੈ। ਕੋਡ ਨੇ ਸਿਰਫ਼ ਇੱਕ ਸਨੈਪਸ਼ਾਟ ਲਿਆ ਸੀ, ਇੱਕ ਪੱਕਾ ਫੈਸਲਾ ਲਿਆ ਸੀ, ਅਤੇ ਫਿਰ ਅੱਗੇ ਵਧ ਗਿਆ ਭਾਵੇਂ ਕੁਝ ਪਲਾਂ ਬਾਅਦ ਕਨੈਕਸ਼ਨ ਬਦਲ ਗਿਆ ਹੋਵੇ।
ਸਿੱਖਿਆ (Takeaway): ਬਦਲਦੇ ਹੋਏ ਟਾਰਗੇਟ ਦੀ ਸਿਰਫ਼ ਇੱਕ ਰੀਡਿੰਗ (reading) ਦੇ ਅਧਾਰ 'ਤੇ ਕੋਈ ਪੱਕਾ ਕਦਮ ਨਾ ਚੁੱਕੋ। ਇੱਕ ਵਾਰ ਪੋਲਿੰਗ (polling) ਕਰਨ ਦੀ ਬਜਾਏ, ਬਦਲਾਅ ਦੀਆਂ ਘਟਨਾਵਾਂ (change events) ਨੂੰ ਸਬਸਕ੍ਰਾਈਬ ਕਰੋ।
ਟੀਮ ਦੁਆਰਾ ਲਾਗੂ ਕੀਤੇ ਗਏ ਵਿਵਹਾਰਕ ਹੱਲ
- ਕਨੈਕਸ਼ਨ ਦੇ ਬਦਲਾਅ ਨੂੰ ਸਬਸਕ੍ਰਾਈਬ ਕਰੋ।
navigator.connectionਨੂੰ ਸਿਰਫ਼ ਇੱਕ ਵਾਰ ਪੜ੍ਹਨ ਦੀ ਬਜਾਏ, ਕੋਡ ਹੁਣchangeਈਵੈਂਟ ਨੂੰ ਸੁਣਦਾ ਹੈ ਅਤੇ ਜੇ ਡਾਊਨਲੋਡ ਦੌਰਾਨ ਬੈਂਡਵਿਡਥ ਘਟਦੀ ਜਾਂ ਵਧਦੀ ਹੈ, ਤਾਂ ਉਸ ਅਨੁਸਾਰ ਕਾਰਵਾਈ ਕਰਦਾ ਹੈ। - "ਨੋ-ਪ੍ਰੋਗਰੈਸ" (no-progress) ਵਾਚਡੌਗ (watchdog) ਜੋੜੋ। ਇੱਕ ਟਾਈਮਰ ਕਿਸੇ ਵੀ ਅਜਿਹੀ ਰਿਕਵੈਸਟ ਨੂੰ ਰੋਕ ਦਿੰਦਾ ਹੈ ਜੋ ਕੁਝ ਸਮੇਂ ਬਾਅਦ ਵੀ ਕੋਈ ਤਰੱਕੀ ਨਹੀਂ ਕਰ ਰਹੀ, ਜਿਸ ਨਾਲ ਬ੍ਰਾਊਜ਼ਰ ਨੂੰ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰਨ ਜਾਂ ਫਾਲਬੈਕ ਕਰਨ ਦੀ ਸਹੂਲਤ ਮਿਲਦੀ ਹੈ।
- ਡਾਊਨਲੋਡ ਦੇ ਵਿਚਕਾਰ CDN ਬਦਲਣਾ ਬੰਦ ਕਰੋ। ਹੌਲੀ ਲਿੰਕ 'ਤੇ ਵੱਡੀ ਫਾਈਲ ਦੇ ਸਰੋਤ ਨੂੰ ਬਦਲਣ ਨਾਲ ਟ੍ਰਾਂਸਫਰ ਜ਼ੀਰੋ ਤੋਂ ਸ਼ੁਰੂ ਹੋ ਜਾਂਦਾ ਹੈ, ਜਿਸ ਨਾਲ ਪਹਿਲਾਂ ਹੀ ਪ੍ਰਾਪਤ ਹੋਏ ਬਾਈਟਸ ਬਰਬਾਦ ਹੋ ਜਾਂਦੇ ਹਨ। ਡਾਊਨਲੋਡ ਹੁਣ ਆਪਣੀ ਪੂਰੀ ਮਿਆਦ ਲਈ ਸ਼ੁਰੂ ਵਿੱਚ ਚੁਣੇ ਗਏ CDN 'ਤੇ ਹੀ ਰਹਿੰਦਾ ਹੈ।
- ਭਾਰੀ ਕੈਸ਼ਿੰਗ (caching) ਕੰਮ ਨੂੰ ਮੁਲਤਵੀ ਕਰੋ। ਉਹ ਕੰਮ ਜੋ ਕੈਸ਼ ਵਿੱਚ ਵੱਡੀ ਮਾਤਰਾ ਵਿੱਚ ਡੇਟਾ ਲਿਖਦੇ ਹਨ, ਉਹਨਾਂ ਨੂੰ runtime ਲੋਡ ਹੋਣ ਤੋਂ ਬਾਅਦ ਤੱਕ ਟਾਲ ਦਿੱਤਾ ਜਾਂਦਾ ਹੈ, ਤਾਂ ਜੋ ਮਹੱਤਵਪੂਰਨ ਪਾਥ (critical path) ਛੋਟਾ ਰੱਖਿਆ ਜਾ ਸਕੇ।
ਜੇਕਰ ਤੁਹਾਡੇ ਡੈਸ਼ਬੋਰਡ ਬਹੁਤ ਜ਼ਿਆਦਾ ਸਾਫ਼-ਸੁਥਰੀ ਤਸਵੀਰ ਪੇਸ਼ ਕਰਦੇ ਹਨ, ਤਾਂ ਹੋਰ ਡੂੰਘਾਈ ਨਾਲ ਜਾਂਚ ਕਰੋ। ਜੇਕਰ ਨੈੱਟਵਰਕ ਮਾਪ (measurement) ਕਦੇ ਨਹੀਂ ਬਦਲਦਾ, ਤਾਂ ਇਸਨੂੰ ਇੱਕ ਪਲੇਸਹੋਲਡਰ ਵਜੋਂ ਲਓ। ਅਤੇ ਜੇਕਰ ਇੱਕ ਸਿੰਗਲ ਸਨੈਪਸ਼ਾਟ ਕਈ ਮੈਗਾਬਾਈਟ ਦੇ ਡਾਊਨਲੋਡ ਦਾ ਭਵਿੱਖ ਤੈਅ ਕਰਦਾ ਹੈ, ਤਾਂ ਤੁਸੀਂ ਇੱਕ ਭਰਮ (mirage) 'ਤੇ ਭਰੋਸਾ ਕਰ ਰਹੇ ਹੋ। ਇਹ ਗਲਤੀਆਂ ਚੁੱਪਚਾਪ ਫੇਲ੍ਹ ਹੋਣ ਵਜੋਂ ਸਾਹਮਣੇ ਆਉਂਦੀਆਂ ਹਨ ਜੋ ਉਪਭੋਗਤਾ ਦੇ ਭਰੋਸੇ ਨੂੰ ਖਤਮ ਕਰ ਦਿੰਦੀਆਂ ਹਨ—ਇੱਕ ਅਜਿਹੀ ਚੀਜ਼ ਜਿਸ ਨੂੰ ਬਾਅਦ ਵਿੱਚ ਕੋਈ ਵੀ ਚਲਾਕ ਕੋਡ ਪੂਰੀ ਤਰ੍ਹਾਂ ਠੀਕ ਨਹੀਂ ਕਰ ਸਕਦਾ।
