Cloudflare, Mozilla ו-Facebook מפתחות את BinaryAST כדי להאיץ את טעינת JavaScript

מהנדסים מ-Cloudflare, Mozilla, Facebook ו-Bloomberg המוצע פורמט חדש binaryAST להאיץ את האספקה ​​והעיבוד של קוד JavaScript בעת פתיחת אתרים בדפדפן. BinaryAST מעביר את שלב הניתוח לצד השרת ומספק עץ תחביר מופשט שכבר נוצר (AST). עם קבלת BinaryAST, הדפדפן יכול להמשיך מיד לשלב ההידור, תוך עקיפת ניתוח קוד המקור של JavaScript.

לבדיקה מוּכָן יישום התייחסות מסופק תחת רישיון MIT. רכיבי Node.js משמשים לניתוח, והקוד לאופטימיזציה ויצירת AST נכתב ב- Rust. תמיכה בצד הדפדפן
BinaryAST כבר זמין ב עצרת לילה פיירפוקס. המקודד ב-BinaryAST יכול לשמש הן ברמת כלי העבודה של האתר והן לאריזת סקריפטים של אתרים חיצוניים בצד של פרוקסי או רשת מסירת תוכן. נכון לעכשיו, תהליך הסטנדרטיזציה של BinaryAST על ידי קבוצת העבודה כבר החל ECMA TC39, לאחר מכן הפורמט יוכל להתקיים במקביל עם שיטות דחיסת תוכן קיימות, כגון gzip ו-brotli.

Cloudflare, Mozilla ו-Facebook מפתחות את BinaryAST כדי להאיץ את טעינת JavaScript

Cloudflare, Mozilla ו-Facebook מפתחות את BinaryAST כדי להאיץ את טעינת JavaScript

בעת עיבוד JavaScript, כמות משמעותית של זמן מושקעת בשלב הטעינה והניתוח של הקוד. בהתחשב בכך שנפח ה-JavaScript שהורדת באתרים פופולריים רבים קרוב ל-10 מגה-בייט (לדוגמה, עבור לינקדאין - 7.2 מגה-בייט, פייסבוק - 7.1 מגה-בייט, ג'ימייל - 3.9 מגה-בייט), העיבוד הראשוני של ג'אווה סקריפט מכניס עיכוב משמעותי. שלב הניתוח בצד הדפדפן מואט גם בגלל חוסר היכולת לבנות את ה-AST במלואו תוך כדי טעינת הקוד (הדפדפן צריך לחכות לבלוקי קוד כדי להשלים את הטעינה, כגון סיום הפונקציות, כדי לקבל המידע שחסר לניתוח האלמנטים הנוכחיים).

הם מנסים לפתור חלקית את הבעיה על ידי הפצת הקוד בצורה ממוזערת ודחוסה, כמו גם על ידי שמירה במטמון של קוד הבתים שנוצר על ידי הדפדפן. באתרים מודרניים, הקוד מתעדכן לעתים קרובות למדי, כך שאחסון במטמון פותר את הבעיה באופן חלקי בלבד. WebAssembly יכול להיות פתרון, אבל הוא דורש הקלדה מפורשת של הקוד ואינו מתאים להאצת עיבוד קוד JavaScript קיים.

אפשרות נוספת היא לספק bytecode מוכן מוכן במקום סקריפטים של JavaScript, אך מפתחי מנועי דפדפן מתנגדים לכך מכיוון שקשה לאמת את קוד הבתים של צד שלישי, העיבוד הישיר שלו יכול להוביל לריבוד אינטרנט, סיכוני אבטחה נוספים מתעוררים ופיתוח של נדרש פורמט קוד בתים אוניברסלי.

BinaryAST מאפשר לך להשתלב במודל פיתוח ואספקת הקוד הנוכחי שלך מבלי ליצור קוד בתים חדש או לשנות את שפת JavaScript. גודל הנתונים בפורמט BinaryAST דומה לקוד JavaScript ממוזער דחוס, ומהירות העיבוד על ידי ביטול שלב ניתוח טקסט המקור עולה באופן ניכר. בנוסף, הפורמט מאפשר קומפילציה לקוד בייט כאשר BinaryAST נטען, מבלי להמתין לסיום כל הנתונים. בנוסף, ניתוח בצד השרת מאפשר להוציא פונקציות שאינן בשימוש וקוד מיותר מהייצוג המוחזר של BinaryAST, אשר בעת ניתוח בצד הדפדפן מבזבז זמן הן בניתוח והן בהעברת תעבורה מיותרת.

תכונה של BinaryAST היא גם היכולת לשחזר JavaScript קריא שאינו זהה לחלוטין לגרסה המקורית, אך שווה ערך מבחינה סמנטית וכולל את אותם שמות של משתנים ופונקציות (BinaryAST שומר שמות, אך אינו שומר מידע על מיקומים ב- קוד, עיצוב והערות). הצד השני של המטבע הוא הופעתם של וקטורי תקיפה חדשים, אך לדברי המפתחים, הם הרבה יותר קטנים וניתנים לשליטה מאשר בעת שימוש בחלופות, כמו הפצת קוד בתים.

בדיקות של קוד facebook.com הראו שניתוח JavaScript גוזל 10-15% ממשאבי המעבד והניתוח לוקח יותר זמן מאשר יצירת קוד בתים ויצירת קוד ראשוני עבור JIT. במנוע SpiderMonkey, הזמן לבנייה מלאה של AST לוקח 500-800 אלפיות השנייה, והשימוש ב-BinaryAST הפחית נתון זה ב-70-90%.
באופן כללי, עבור רוב זיקוקי הרשת, בעת שימוש ב-BinaryAST, זמן הניתוח של JavaScript מצטמצם ב-3-10% במצב ללא אופטימיזציה וב-90-97% כאשר מופעל מצב ההתעלמות מפונקציות שאינן בשימוש.
בעת הפעלת ערכת בדיקות JavaScript של 1.2 מגה-בייט, השימוש ב-BinaryAST אפשר את זמן האתחול להאיץ מ-338 ל-314 אלפיות השנייה במערכת שולחנית (Intel i7) ומ-2019 ל-1455 אלפיות השנייה במכשיר נייד (HTC One M8).

מקור: OpenNet.ru

הוספת תגובה