הקונסול משקר לך
כלי הפיתוח (DevTools) בדפדפן שלך עלולים להטעות אותך בזמן ניפוי שגיאות (debugging). הם לא שבורים. הם מותאמים למהירות, לא לדיוק מושלם.
הנה הסיבות לכך שלא תמיד ניתן לסמוך על console.log.
• הערכה עצלה (Lazy Evaluation) כשאתה מדפיס אובייקט ללוג, הדפדפן לא מעתיק אותו מיד. הוא שומר רפרנס (reference) חי. הדפדפן קורא את המאפיינים רק כשאתה לוחץ על החץ כדי להרחיב אותו. אם הקוד שלך משנה את האובייקט הזה לפני שלחצת, תראה את הערך החדש, לא את הישן.
• אפקט ה-Heisenbug
הוספת console.log יכולה למעשה להסתיר באגים. פעולת הרישום (logging) דורשת זמן ומשאבים. בקוד מהיר, העיכוב הקטן הזה יכול לשנות את התזמון של האפליקציה שלך. זה יכול למנוע מצבי מרוץ (race conditions) לקרות בזמן שאתה צופה בהם, מה שגורם לבאג להיעלם.
• מלכודות State ב-React
הדפסת state מיד לאחר קריאה ל-setCount תציג את הערך הישן. זה קורה בגלל closures ודרך שבה React מתזמנת עדכונים. הערך שאתה מדפיס שייך לרינדור (render) הנוכחי, לא הבא.
• שגיאות Source Map בסביבת production, הקוד שלך עובר minification ו-bundling. אם ה-source maps שלך ישנים או שגויים, הקונסול יצביע על שורה לא נכונה בקוד. השגיאה אמיתית, אבל המיקום שגוי.
איך לבצע debugging טוב יותר:
השתמש ב-
structuredCloneכדי ליצור snapshots אם אתה צריך לראות אובייקט בדיוק כפי שהוא כרגע, השתמש ב:const snap = structuredClone(obj)console.log(snap)הדפס primitives במקום אובייקטים גדולים הדפס IDs, timestamps או מחרוזות סטטוס. זה מפחית את הסיכון של הערכה עצלה (lazy evaluation) ופגיעה בביצועים.
השתמש ב-debugger השתמש ב-breakpoints כדי להשהות את ההרצה. זה מאפשר לך לבחון את ה-state האמיתי ואת ה-call stack מבלי לשנות את התזמון של הקוד שלך.
השתמש ב-DevTools של ה-framework אם אתה משתמש ב-React או ב-Vue, השתמש ב-DevTools הספציפיים שלהם. הם מציגים לך את שלבי ה-lifecycle וה-render בצורה מדויקת יותר מאשר לוגים.
הקונסול הוא כלי מצוין לחקירה מהירה. אל תשתמש בו כמקור האמת הסופי שלך.
מקור: https://dev.to/gkoos/your-console-is-lying-to-you-3dlc
