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

מקסים סדים
מקסים סדים

ההפעלה של כלי הפיתוח מהירה יותר ב-13% בערך 🎉 (מ-11.2 שניות עד 10 שניות)

אמ;לק; התוצאה מתקבלת על ידי הסרת סידור בהמשכים מיותר.

סקירה

במהלך ההפעלה של כלי הפיתוח, צריך לבצע מספר קריאות למנוע V8 JavaScript.

תהליך ההפעלה של כלי הפיתוח

המנגנון שמשמש את Chromium לשליחת פקודות DevTools אל V8 (ול-IPC באופן כללי) נקרא mojo. חברי הצוות שלי בנדיקט מורר וסיגורד שניידר גילו חוסר יעילות במהלך עבודה על משימה אחרת, והעלו רעיון לשיפור התהליך באמצעות הסרת שני שלבים מיותרים באופן השליחה והקבלה של הודעות אלה.

נסביר בפירוט איך פועל מנגנון mojo.

המנגנונים של mojo

המנגנונים של המוג'ו

יש פקודת mojo EvaluateScript שמפעילה את פקודת ה-JS. הוא מבצע סריאליזציה של כל פקודת ה-JS, כולל arguments, למחרוזת של קוד מקור של JavaScript שיכולה להיות eval(). כפי שאתם עשויים לדמיין, מחרוזות אלה יכולות להיות ארוכות ויקרות למדי. אחרי שהפקודה מתקבלת ב-V8, המחרוזות האלה של קוד JavaScript עוברות פעולת deserialize לפני שהן מריצים. התהליך הזה של סידור מחדש ושינויי רקע לכל הודעה יוצרת תקורה משמעותית.

ב-Bedikt Meurer הבין שניהול סריאליזציה והתמדה של arguments הוא יקר למדי, ושכל השלבים "Serialize JS למחרוזת JS" ו-"Deserialize JS string" הם מיותרים ואפשר לדלג עליהם.

פרטים טכניים: RenderFrameHostImpl::ExecuteJavaScript

איך השתפרנו

מנגנונים משופרים

הצגנו שיטת mojo API נוספת שמאפשרת לנו להעביר את שם האובייקט, את השיטה לקריאה ואת רשימת הארגומנטים באופן ישיר, במקום ליצור את המחרוזת של קוד המקור של 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)

שם השיטה ללא אופטימיזציה (אלפיות שנייה) אופטימיזציה (אלפיות שנייה) הבדלים (באלפיות שנייה) שיפור מהירות (%)
סה"כ 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%

זמן טעינה של מעבד (CPU) בכלי הפיתוח (אלפיות השנייה)

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

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

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

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

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

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

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