آپ کا کنسول آپ سے جھوٹ بول رہا ہے
آپ کے براؤزر DevTools ڈیبگنگ کے دوران آپ کو گمراہ کر سکتے ہیں۔ یہ خراب نہیں ہے۔ اسے مکمل درستگی کے بجائے رفتار کے لیے بہتر (optimize) بنایا گیا ہے۔
یہاں وجہ بتائی گئی ہے کہ آپ ہمیشہ console.log پر بھروسہ کیوں نہیں کر سکتے۔
• Lazy Evaluation جب آپ کسی آبجیکٹ (object) کو لاگ کرتے ہیں، تو براؤزر اسے فوری طور پر کاپی نہیں کرتا۔ یہ ایک لائیو ریفرنس (live reference) محفوظ کرتا ہے۔ براؤزر پراپرٹیز کو صرف اس وقت پڑھتا ہے جب آپ اسے پھیلانے کے لیے تیر (arrow) پر کلک کرتے ہیں۔ اگر آپ کے کلک کرنے سے پہلے آپ کا کوڈ اس آبجیکٹ کو تبدیل کر دیتا ہے، تو آپ کو پرانی قیمت کے بجائے نئی قیمت نظر آئے گی۔
• The Heisenbug Effect console.log شامل کرنے سے اصل میں بگ (bug) چھپ سکتے ہیں۔ لاگنگ میں وقت اور وسائل لگتے ہیں۔ تیز رفتار کوڈ میں، یہ معمولی سی تاخیر آپ کی ایپلی کیشن کے ٹائمنگ کو تبدیل کر سکتی ہے۔ یہ آپ کے دیکھتے وقت ریس کنڈیشنز (race conditions) کو ہونے سے روک سکتا ہے، جس سے بگ غائب ہو جاتا ہے۔
• React State Traps setCount کال کے فوراً بعد اسٹیٹ (state) کو لاگ کرنے سے پرانی ویلیو نظر آتی ہے۔ یہ کلوزرز (closures) اور اس طریقے کی وجہ سے ہوتا ہے جس سے React اپ ڈیٹس کو شیڈول کرتا ہے۔ آپ جو ویلیو لاگ کرتے ہیں وہ موجودہ رینڈر (render) سے تعلق رکھتی ہے، اگلے سے نہیں۔
• Source Map Errors پروڈکشن میں، آپ کا کوڈ منٹی فائی (minified) اور بنڈل (bundled) ہوتا ہے۔ اگر آپ کے سورس میپس (source maps) پرانے یا غلط ہوں، تو کنسول کوڈ کی غلط لائن کی طرف اشارہ کرے گا۔ غلطی حقیقی ہوتی ہے، لیکن مقام غلط ہوتا ہے۔
بہتر طریقے سے ڈیبگ کیسے کریں:
اسنیپ شاٹس لینے کے لیے structuredClone کا استعمال کریں اگر آپ کو کسی آبجیکٹ کو بالکل اسی طرح دیکھنا ہے جیسا کہ وہ اس وقت ہے، تو استعمال کریں: const snap = structuredClone(obj) console.log(snap)
بڑے آبجیکٹس کے بجائے پرائمٹیوز (primitives) کو لاگ کریں IDs، ٹائم اسٹیمپ (timestamps)، یا اسٹیٹس اسٹرنگز کو لاگ کریں۔ اس سے lazy evaluation اور کارکردگی (performance) پر اثر پڑنے کا خطرہ کم ہو جاتا ہے۔
debugger کا استعمال کریں ایگزیکیوشن (execution) کو روکنے کے لیے بریک پوائنٹس (breakpoints) کا استعمال کریں۔ یہ آپ کو اپنے کوڈ کی ٹائمنگ تبدیل کیے بغیر اصل اسٹیٹ اور کال اسٹیک (call stack) کا معائنہ کرنے کی اجازت دیتا ہے۔
فریم ورک DevTools کا استعمال کریں اگر آپ React یا Vue استعمال کرتے ہیں، تو ان کے مخصوص DevTools استعمال کریں۔ وہ لاگز کے مقابلے میں لائف سائیکل (lifecycle) اور رینڈر فیز (render phases) کو زیادہ درست طریقے سے دکھاتے ہیں۔
کنسول فوری طور پر چیزوں کو سمجھنے کے لیے ایک بہترین ٹول ہے۔ اسے حقیقت کا حتمی ذریعہ نہ سمجھیں۔
ماخذ: https://dev.to/gkoos/your-console-is-lying-to-you-3dlc
