הפעלת כלי הפיתוח מהירה עכשיו בכ-13% 🎉 (מ-11.2 שניות ל-10 שניות)
אמ;לק: התוצאה מתקבלת על ידי הסרת סריאליזציה מיותרת.
סקירה כללית
בזמן ההפעלה של DevTools, הוא צריך לבצע כמה קריאות למנוע JavaScript V8.
המנגנון שבו Chromium משתמש כדי לשלוח פקודות של DevTools ל-V8 (ול-IPC באופן כללי) נקרא mojo
. חברי הצוות שלי, Benedikt Meurer ו-Sigurd Schneider, גילו חוסר יעילות בזמן שעבדו על משימה אחרת, והעלו רעיון לשיפור התהליך על ידי הסרת שני שלבים מיותרים בתהליך השליחה והקבלה של ההודעות האלה.
עכשיו נצלול לתוך אופן הפעולה של המנגנון mojo
.
המנגנונים של mojo
יש פקודה של Mojo EvaluateScript
שמריצה את הפקודה ב-JS. הוא מסדר את כל הפקודה ב-JS, כולל arguments
, במחרוזת של קוד מקור של JavaScript שיכול להיות eval()
. כפי שאפשר לדמיין, המחרוזות האלה יכולות להיות ארוכות ויקרות למדי. אחרי שהפקודה מתקבלת ב-V8, מחרוזות הקוד של JavaScript עוברות סריאליזציה לפני ההרצה. התהליך הזה של שרשור (serializing) וביטול שרשור (deserializing) לכל הודעה יוצר עומס משמעותי.
Benedikt Meurer הבין שהסריאליזציה וההמרה לאחור של arguments
הן יקרות למדי, ושכל השלבים Serialize JS command to JS string ו-Deserialize JS string הם מיותרים וניתן לדלג עליהם.
פרטים טכניים: RenderFrameHostImpl::ExecuteJavaScript
איך שיפרנו את התכונה
הוספנו שיטה נוספת של Mojo API שמאפשרת לנו להעביר את שם האובייקט, את השיטה שרוצים לקרוא לה ואת רשימת הארגומנטים ישירות, במקום ליצור את המחרוזת של קוד המקור של JavaScript. כך אנחנו יכולים לדלג על שרשור (serialization) ופירוק שרשור (deserialization), ולחסוך את הצורך לנתח את קוד ה-JavaScript.
פרטים טכניים על אופן ההטמעה של האופטימיזציה הזו מופיעים בשני התיקונים הבאים:
- CL 2431864: [devtools] הפחתת זמן האחזור של שליחת הודעות בחזית
- CL 2442012: [devtools] שימוש ב-
ExecuteJavaScriptMethod
בכלי הפיתוח
השפעה
כדי למדוד את היעילות של השינוי, ביצענו כמה מדידות בהשוואה בין הגרסאות של Chromium cb971089a058 ו-4f213b39d581 (לפני ואחרי השינוי).
בשתי הגרסאות, הרצנו את התרחיש הבא 5 פעמים:
- הקלטת מעקב באמצעות
chrome://tracing
- פתיחת 'כלי הפיתוח בתוך כלי הפיתוח'
- מקבלים את המעקב
CrRendererMain
שתועד ומשווים את המדדים הספציפיים ל-V8.
על סמך הניסויים האלה, כלי הפיתוח נפתח בערך 13% מהר יותר (מ-11.2 שניות ל-10 שניות) עם האופטימיזציה.
רגעי שיא, משכי זמן של מעבדים (CPU)
שם השיטה | ללא אופטימיזציה (אלפיות שנייה) | אופטימיזציה (אלפיות שנייה) | הבדלים (אלפיות שנייה) | שיפור המהירות (%) |
סה"כ | 11,213.19 | 9,953.99 | -1,259.20 | 12.65% |
v8.run | 499.67 | 3.61 | -496.06 | 12.65% |
V8.Execute | 1,654.87 | 1,349.61 | -305.25 | 3.07% |
v8.callFunction | 1,171.84 | 1,339.77 | 167.94 | -1.69% |
v8.compile | 133.93 | 3.56 | -130.37 | 1.31% |
טבלת השוואה מלאה של מדדי המעקב
כתוצאה מכך, כלי הפיתוח נפתחים ופועלים מהר יותר עם פחות שימוש במעבד. 🎉
מורידים את הערוצים של התצוגה המקדימה.
מומלץ להשתמש ב-Chrome Canary, ב-Dev או ב-Beta כדפדפן הפיתוח שמוגדר כברירת מחדל. ערוצי התצוגה המקדימה האלה מעניקים לכם גישה לתכונות העדכניות ביותר של DevTools, מאפשרים לכם לבדוק ממשקי API מתקדמים לפלטפורמות אינטרנט ולמצוא בעיות באתר לפני שהמשתמשים שלכם יעשו זאת.
יצירת קשר עם צוות כלי הפיתוח ל-Chrome
אתם יכולים להשתמש באפשרויות הבאות כדי לדון בתכונות החדשות, בעדכונים או בכל דבר אחר שקשור ל-DevTools.
- אתם יכולים לשלוח לנו משוב ובקשות להוספת תכונות בכתובת crbug.com.
- מדווחים על בעיה בכלי הפיתוח באמצעות הסמל אפשרויות נוספות > עזרה > דיווח על בעיה בכלי הפיתוח ב-DevTools.
- שולחים ציוץ אל @ChromeDevTools.
- אפשר להשאיר תגובות בסרטונים של מה חדש בכלי הפיתוח ב-YouTube או בסרטונים של טיפים לכלי הפיתוח ב-YouTube.