ההפעלה של כלי הפיתוח מהירה יותר ב-13% עכשיו 🎉 (מ-11.2 שניות עד 10 שניות)
אמ;לק: התוצאה מתקבלת באמצעות הסרת סידור טורי עודף.
סקירה
בזמן ההפעלה של כלי הפיתוח, צריך לבצע מספר קריאות אל מנוע V8 JavaScript.
המנגנון שמשמש את Chromium לשליחת פקודות של כלי פיתוח אל V8 (וכלל-IPC) נקרא mojo
. חברי הצוות שלי, בנדיקט מורר וסיגורד שניידר, גילו חוסר יעילות בזמן שעבדו על משימה אחרת, והעלו רעיון לשיפור התהליך על ידי הסרת שני שלבים מיותרים באופן שבו ההודעות האלה נשלחות והתקבלות.
אנחנו רוצים להבין איך פועל מנגנון mojo
.
המנגנונים של mojo
יש פקודת mojo EvaluateScript
שמריצה את פקודת JS. הוא יוצר סריאליזציה של כל פקודת ה-JS, כולל arguments
, למחרוזת של קוד מקור של JavaScript שיכולה להיות eval()
. כפי שאפשר לדמיין, מחרוזות אלה יכולות להיות ארוכות ויקרות למדי. אחרי קבלת הפקודה ב-V8, המחרוזות האלה של קוד JavaScript עוברות תהליך deserialize לפני ההרצה. התהליך הזה של עריכת סריאליזציה וביטול הדבר (deserialing) לכל הודעה יוצר תקורה משמעותית.
בנדיקט מורר הבין שפעולת סריאליזציה וביטול המרה (deserialization) של arguments
הן די יקרות, ושכל השלבים "בתום של JS למחרוזת JS" ו-"Deserialize JS string" הם מיותרים ואפשר לדלג עליהם.
פרטים טכניים: RenderFrameHostImpl::ExecuteJavaScript
איך השתפרנו
השקנו שיטה נוספת של ממשק ה-API של mojo, המאפשרת להעביר את שם האובייקט, את השיטה שצריך לקרוא וגם את רשימת הארגומנטים, במקום ליצור את מחרוזת קוד המקור של JavaScript. כך אנחנו יכולים לדלג על סריאליזציה (סריאליזציה) ועל פעולת ההמרה (deserialization), ואין צורך לנתח את קוד ה-JavaScript.
לקבלת פרטים טכניים על האופן שבו יישמנו את האופטימיזציה הזו, אפשר לעיין בשני התיקונים הבאים:
- CL 2431864: [devtools] הפחתת התקורה של הביצועים של שליחת הודעות בממשק הקדמי
- CL 2442012: [כלי פיתוח] שימוש ב-
ExecuteJavaScriptMethod
בכלי הפיתוח
השפעה
כדי למדוד את יעילות השינוי, ערכנו כמה מדידות שהשוו בין הגרסאות של Chromium cb971089a058 ו-4f213b39d581 (לפני השינוי ואחריו).
בשתי הגרסאות הקודמות, הפעלנו את התרחיש הבא 5 פעמים:
- הקלטת המעקב באמצעות
chrome://tracing
- פתיחת כלי הפיתוח בכלי הפיתוח
- מקבלים את המעקב המתועד של
CrRendererMain
ומשווים בין המדדים הספציפיים ל-V8.
על סמך הניסויים האלה, כלי הפיתוח נפתחים מהר יותר ב-13% בערך (מ-11.2 שניות עד 10 שניות) עם האופטימיזציה.
המיטב, משך הזמן של המעבד (CPU)
שם ה-method | לא בוצעה אופטימיזציה (באלפיות השנייה) | אופטימיזציה (באלפיות שנייה) | הבדלים (באלפיות השנייה) | שיפור מהירות (%) |
סה"כ | 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 | 25.-305. | 3.07% |
v8.callFunction | 1,171.84 | 1,339.77 | 167.94 | 1.69%- |
v8.compile | 133.93 | 3.56 | -130.37 | 1.31% |
טבלת השוואה מלאה של מדדי המעקב
כתוצאה מכך, כלי הפיתוח נפתחים ופועלים מהר יותר ככל שמשתמשים פחות במעבד (CPU). 🎉
הורדת הערוצים של התצוגה המקדימה
כדאי להשתמש ב-Chrome Canary, Dev או בטא כדפדפן הפיתוח שמוגדר כברירת מחדל. הערוצים לתצוגה מקדימה אלה מעניקים לך גישה לתכונות החדשות של כלי הפיתוח, בודקים ממשקי API מתקדמים של פלטפורמות אינטרנט ומוצאים בעיות באתר שלך לפני שהמשתמשים עושים זאת.
יצירת קשר עם הצוות של כלי הפיתוח ל-Chrome
אפשר להשתמש באפשרויות הבאות כדי לדון בתכונות ובשינויים החדשים בפוסט, או בכל נושא אחר שקשור לכלי פיתוח.
- אפשר לשלוח לנו הצעה או משוב דרך crbug.com.
- כדי לדווח על בעיה בכלי הפיתוח, לוחצים על אפשרויות נוספות > עזרה > דיווח על בעיות בכלי הפיתוח בכלי הפיתוח.
- שליחת ציוץ אל @ChromeDevTools.
- נשמח לשמוע מה חדש בסרטונים ב-YouTube של כלי הפיתוח או בסרטונים ב-YouTube שקשורים לכלי פיתוח.