7 צווארי בקבוק נסתרים ב-JavaScript ואיך לתקן אותם

אפליקציות אינטרנט איטיות כמעט אף פעם לא נכשלות בגלל אלגוריתמים גרועים. הן נכשלות בגלל האופן שבו הקוד שלכם מתקשר עם הדפדפן.

ביצעתי פרופילציה (profiling) ל-300 אפליקציות בסביבת ייצור. 73% מבעיות הביצועים נובעות מ-7 המקורות הללו.

  1. Layout thrashing זה קורה כשקוראים מאפיין, כותבים ל-DOM, ואז קוראים שוב. זה מאלץ את הדפדפן לחשב מחדש את ה-layout שוב ושוב.
  1. Unbounded event listeners הוספת event listener מבלי להסיר אותו יוצרת דליפות זיכרון (memory leaks). זו בעיה מרכזית באפליקציות בעמוד בודד (SPA).
  1. Synchronous DOM reads in loops קריאה של offsetWidth או getBoundingClientRect בתוך לולאה גורמת ל-reflows מתמשכים.
  1. Missing requestAnimationFrame batching שינויי DOM ישירים באירועי scroll או resize מתבצעים בתדירות גבוהה מדי. זה גורם ל-jank.
  1. Large JSON.parse payloads ניתוח (parsing) של קבצים גדולים חוסם את ה-main thread. זה גורם לעיכוב בקלט (input lag).
  1. Complex CSS selector matching סלקטורים מקוננים עמוק או מורכבים מאטים את חישוב מחדש של הסטייל.
  1. Duplicate bundle chunks bundles גדולים ולא אופטימליים מבזבזים זמן העברה.

איך למדוד את ההתקדמות שלכם:

תיקון תחומים אלו ישפר את ה-Core Web Vitals שלכם, ובמיוחד את ה-Largest Contentful Paint ואת ה-Interaction to Next Paint.

מקור: https://dev.to/kui_luo/how-to-find-and-fix-7-hidden-performance-bottlenecks-in-your-javascript-code-ek5