שיפור זמן ההפעלה של כלי הפיתוח

Maksim Sadym
Maksim Sadym

ההפעלה של כלי הפיתוח מהירה יותר ב-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.

לקבלת פרטים טכניים על האופן שבו יישמנו את האופטימיזציה הזו, אפשר לעיין בשני התיקונים הבאים:

  1. CL 2431864: [devtools] הפחתת התקורה של הביצועים של שליחת הודעות בממשק הקדמי
  2. CL 2442012: [כלי פיתוח] שימוש ב-ExecuteJavaScriptMethod בכלי הפיתוח

השפעה

כדי למדוד את יעילות השינוי, ערכנו כמה מדידות שהשוו בין הגרסאות של Chromium cb971089a058 ו-4f213b39d581 (לפני השינוי ואחריו).

בשתי הגרסאות הקודמות, הפעלנו את התרחיש הבא 5 פעמים:

  1. הקלטת המעקב באמצעות chrome://tracing
  2. פתיחת כלי הפיתוח בכלי הפיתוח
  3. מקבלים את המעקב המתועד של 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) של כלי הפיתוח (באלפיות השנייה)

טבלת השוואה מלאה של מדדי המעקב

כתוצאה מכך, כלי הפיתוח נפתחים ופועלים מהר יותר ככל שמשתמשים פחות במעבד (CPU). 🎉

הורדת הערוצים של התצוגה המקדימה

כדאי להשתמש ב-Chrome Canary, Dev או בטא כדפדפן הפיתוח שמוגדר כברירת מחדל. הערוצים לתצוגה מקדימה אלה מעניקים לך גישה לתכונות החדשות של כלי הפיתוח, בודקים ממשקי API מתקדמים של פלטפורמות אינטרנט ומוצאים בעיות באתר שלך לפני שהמשתמשים עושים זאת.

יצירת קשר עם הצוות של כלי הפיתוח ל-Chrome

אפשר להשתמש באפשרויות הבאות כדי לדון בתכונות ובשינויים החדשים בפוסט, או בכל נושא אחר שקשור לכלי פיתוח.

  • אפשר לשלוח לנו הצעה או משוב דרך crbug.com.
  • כדי לדווח על בעיה בכלי הפיתוח, לוחצים על אפשרויות נוספות   עוד   > עזרה > דיווח על בעיות בכלי הפיתוח בכלי הפיתוח.
  • שליחת ציוץ אל @ChromeDevTools.
  • נשמח לשמוע מה חדש בסרטונים ב-YouTube של כלי הפיתוח או בסרטונים ב-YouTube שקשורים לכלי פיתוח.