מה חדש במנוע ה- V8 של גוגל JavaScript מגרסה 7

גרסת הביטא V8 גרסה 7.4 זמינה כעת, עם פוטנציאל להרחיב את טביעת הרגל של המנוע לפלטפורמות כמו Apple iOS. V8 הוא מנוע ה- JavaScript הפתוח של Google ומנוע ה- WebAssemble עבור דפדפן Chrome. זהו מצרך בסיסי הן בדפדפן Chrome והן בזמן הריצה של JavaScript.

היכן ניתן להוריד את Google V8

אתה יכול להוריד את גרסת הייצור של Google V8 מ- Chromium V8 repo.

גרסה עתידית: מה חדש ב- V8 גרסה 7.4

עם גרסת ההפקה שתוצג באפריל 2019, ל- Google V8 בטא 7.4 יש את התכונות החדשות הבאות:

  • VIT ללא JIT, בו תומכת ביצוע JavaScript מבלי להקצות זיכרון הפעלה בזמן הריצה. זה יכול לאפשר הרחבה של V8 לפלטפורמות כגון Apple iOS, טלוויזיות חכמות וקונסולות משחק. תצורת ברירת המחדל של V8 הסתמכה על היכולת להקצות ולשנות זיכרון הפעלה בזמן ריצה. אך ישנם מצבים בהם יכול להיות רצוי להריץ את המנוע ללא הקצאת זיכרון הפעלה, כמו פלטפורמות שאסרו גישה לכתיבה לזיכרון שאינו ניתן להפעלה ליישומים שאינם מורשים, כולל iOS. כמו כן, אי אישור כתיבה לזיכרון הפעלה מצמצם את משטח ההתקפה של יישום המנצלים. במצב JIT-less, V8 עובר למצב מתורגמן בלבד עבור JavaScript; WebAssemble כרגע אינו תומך במצב זה. מצב ללא JIT כולל עונש ביצוע.
  • Threads / Atomics של WebAssemble מופעלים כעת במערכות הפעלה שאינן אנדרואיד. מהלך זה פותח את השימוש במספר ליבות באמצעות WebAssembly, ומאפשר שימושים חדשים וכבדי חישוב באינטרנט.
  • כדי לשפר את הביצועים, גרסה 7.4 מדלגת על התאמת טיעונים במקרים מסוימים, ומפחיתה את תקורת השיחות בשיעור של 60 אחוזים.
  • הביצועים שופרו לצורך קריאה לגורמים מקוריים, שהם גישת DOM.
  • הביצועים של הכנת הכונן שופרו על ידי הסרת הכפילה של כפילויות הקשורות לשמות נכסים. בנוסף, תוקנה בעיית ביצועים שכללה פענוח UTF-8 מותאם אישית המשמש את זרם המקור.
  • כדי לצמצם תקורה של זיכרון, יושמה תמיכה בשטיפה מקודדת של קוד קוד מפונקציות במהלך איסוף האשפה אם הם לא בוצעו לאחרונה.
  • כדי לתמוך בשדות מחלקה פרטיים, מפתחים יכולים לסמן שדה כפרטי על ידי הענקת #קידומת לקידומת.

היכן ניתן להוריד את גרסת הביטא V8 7.4

אתה יכול להוריד את גרסת הביטא של V8 מ- Chromium Git repo של גוגל.

גרסה נוכחית: מה חדש ב- V8 גרסה 7.3

תכונות חדשות ב- V8 7.3 כוללות:

  • --async-stack-tracesהדגל מופעל כברירת מחדל.
  • עקבות מחסניות אסינכרון בעלות אפסית מקלות על אבחון בעיות בייצור באמצעות קוד אסינכרוני; stackהנכס בדרך כלל נשלח קבצים ושירותי יומן מספק כעת תובנה יותר בבעיות.
  • מהיר יותר await, כאשר --harmony-await-optimizationהדגל מופעל כברירת מחדל. זהו תנאי מוקדם ל --async-stack-traces.
  • הפעלה מהירה יותר להרכבה באינטרנט באמצעות אופטימיזציות. עבור מרבית עומסי העבודה, משופר האוסף ב -15% ל -25%.
  • תכונות JavaScript כגון fromEntries(), API לביצוע ההפוך של Object.entries, ו-  String.prototype.MatchallAPI כדי להקל על החלת ביטויים רגולריים גלובליים או דביקים על מחרוזת וחזרה דרך כל ההתאמות.

גרסה נוכחית: מה חדש ב- Google V8 גרסה 7.2

גרסה 7.2 של V8 בינואר 2019 משפרת את ניתוח JavaScript, את הפורמט הבינארי של WebAssembly ואת הזיכרון.

כדי לשפר את מהירות הניתוח, V8 גרסה 7.2 כוללת את מה שגוגל מכנה את מנתח ה- JavaScript המהיר ביותר של המנוע אי פעם, וכתוצאה מכך טעינת עמודים מהירה יותר ודפים מגיבים יותר. מאז V8 גרסה 7.0, מהירות הניתוח בשולחן העבודה השתפרה בכ- 30 אחוזים, אומרת גוגל.

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

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

שינויי עיצוב במוקצה הרישום משפרים את הביצועים לדפוסי קוד שיופיעו במהדורה מאוחרת יותר. כמו כן, מטפלי מלכודות בגרסה 7.2 משפרים את תפוקת קוד WebAssembly. הם מיושמים ב- Windows, MacOS ו- Linux. ב- Chromium הם מופעלים ב- Linux, כאשר MacOs ו- Windows יכולים לעקוב אחרי אישור היציבות. התוכניות קוראות גם שיהיו זמינות באנדרואיד.

תכונות חדשות נוספות ב- V8 7.2 כוללות:

  • ביצועי אלמנטים מורחים שופרו כאשר אלה מתרחשים בחזית המערך מילולית.
  • מהיר async/ await יישום מופעל כברירת מחדל. ניתן למזג את השינוי במפרט הרשמי של ECMAScript.
  • עקבות מחסור אסינכרון עם אפס חופים מעשירות את stackהנכס במסגרות שיחה אסינכרוניות. יכולת זו זמינה מאחורי --async-stack-tracesדגל שורת הפקודה.
  • תמיכה בשדות מחלקה ציבורית, המרחיבה את התחביר של JavaScript לפשט.
  • ListFormatההצעה, עבור לוקליזציה העיצוב של רשימות.
  • stringify כעת מוציא רצפי בריחה עבור פונדקאיות בודדות, מה שהופך את הפלט לתקף ל- Unicode.

גרסה קודמת: מה חדש ב- Google V8 גרסה 7.1

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

תכונות חדשות נוספות ב- V8 גרסה 7.1:

  • עבור JavaScript, ה- RelativeTimeformatAPI שמופיע בשדרוג מאפשר עיצוב מקומי של זמנים יחסית, כמו "אתמול", מבלי לוותר על הביצועים. כמו כן, גרסה 7.1 תומכת GlobalThisבהצעה, ומספקת מנגנון אוניברסלי לגישה לאובייקט הגלובלי גם בפונקציות או במודולים קפדניים, ללא קשר לפלטפורמה.
  • עבור פורמט bytecode של WebAssembly, postMessageנתמך עבור מודולים. התנהגות זו מוגדרת לעובדי רשת ואינה מורחבת לתרחישים חוצי-תהליכים.

גרסה קודמת: מה חדש ב- Google V8 גרסה 7.0

גרסת 7.0 של אוקטובר 2018 מציגה תצוגה מקדימה של שרשורי WebAssembly, המספקים פרימיטיבי לחישוב מקביל. כדי להשתמש בשרשורים בדפדפן Chrome, המשתמש ב- V8, מפתחים יכולים לאפשר זאת באמצעות chrome://flags/#enable-webassembly-threadsאו להירשם לניסוי מקור, לצורך התנסות בתכונות אינטרנט חדשות. WebAssemble, המכונה Wasm, מאפשר לאסוף את הקוד הכתוב בשפות שונות להפעלה באינטרנט.

תכונות חדשות אחרות ב- V8 7.0 כוללות:

  • עבור JavaScript, descriptionנכס נוסף prototype, ומספק דרך ארגונומית יותר לגישה לתיאור. כמו כן, Array.prototype.sortהופך להיות יציב בגרסה 7.0.
  • הרחבה של מובנים מובנים, אשר חוסכים זיכרון על ידי שיתוף קוד שנוצר על ידי מספר בידודים. V8 גרסה 6.9 אפשרה מובנים בארכיטקטורת X64 בעוד שגרסה 7.0 מרחיבה אותם לפלטפורמות הנותרות למעט IA-32.

גרסה קודמת: מה חדש ב- Google V8 גרסה 6.9

גרסת 6.9 V8 בספטמבר 2018 מתמקדת בשיפור זיכרון וביצועים עבור מנוע ה- JavaScript של גוגל.

לחיסכון בזיכרון, גרסה 6.9 מציעה מובנים מובנים למחשבים מבוססי x64. אלה פונקציות המשותפות לכל המבודדים ומוטמעות בבינארי עצמו במקום להעתיקן לערימת JavaScript, וכך קיימות בזיכרון רק פעם אחת ללא קשר למספר המבודדים הפועלים. מעצבי V8 ראו הפחתה של 9 אחוזים בממוצע בגודל הערמה ב -10,000 האתרים המובילים במחשבי x64. התמיכה בפלטפורמות אחרות תבוא במהדורות מאוחרות יותר.

לצורך ביצועים, V8 גרסה 6.9 מצמצמת את זמני ההשהיה של איסוף האשפה באמצעות Mark-Compact על ידי שיפור WeakMapהעיבוד. סימון מקביל ומצטבר כעת יכול לעבד WeakMaps. בעבר, עבודה זו נעשתה בהפסקה האטומית האחרונה של אוסף האשפה של מארק-קומפקט. איסוף האשפה עושה כעת גם יותר עבודות במקביל לזמני הפסקה נמוכים יותר.

לצורך ביצועים, DataViewהוחלפו שיטות ב- V8 Torque, וחסכו קריאה יקרה ל- C ++ בהשוואה ליישום זמן הריצה הקודם. כמו כן, שיחות DataViewלשיטות מעכשיו מונחות בעת הידור JavaScript לתוך מהדר האופטימיזציה של TurboFan. זה מספק ביצועי שיא טובים יותר עבור קוד חם.

גרסת V8 6.9 כוללת גם את Liftoff, מהדר בסיס לפורמט הקוד הנייד WebAssembly. זה מופעל כברירת מחדל ונועד להפחית את זמני ההפעלה של יישומים מבוססי WebAssembly על ידי יצירת קוד במהירות האפשרית. איכות הקוד עצמו היא בעדיפות משנית עבור Liftoff, כאשר בסופו של דבר מהדר קוד ה- Compiler של TurboFan של V8.

Liftoff פותח כדי לטפל בבעיה בה הקצה האחורי של תהליך האוסף עבור TurboFan גוזל זמן וזיכרון רב, מה שהפחית את הביצועים של קוד ה- WebAssembly. Liftoff מונע את תקופת הזמן והזיכרון של ייצוג ביניים, ויוצר קוד מכונה במעבר יחיד על קוד הביצה של פונקציית WebAssemble. Liftoff ו- Turbofan מעניקים ל- V8 שתי דרגות אוסף, כאשר Liftoff מהדר בסיס להפעלה מהירה ו- TurboFan מספקת אופטימיזציה לביצועים.

גוגל גם מתכננת לשפר עוד יותר את זמן ההפעלה, לצמצם את צריכת הזיכרון ולהביא יתרונות של Liftoff למשתמשים רבים יותר. תוכניות אלה כוללות יציאות למעבדי ARM לשימוש במכשירים ניידים. Liftoff עובד כרגע רק בפלטפורמות 32 ו -64 סיביות של אינטל. שיפורים אחרים הנבחנים כוללים:

  • יישום שכבה דינמית למכשירים ניידים, כדי להתאים לנפחי זיכרון נמוכים יותר במכשירים אלה. הניסויים מתקדמים בשילוב של קומפילציה עצלה עם Liftoff ושכבה דינמית של פונקציות חמות ב- TurboFan.
  • שיפור ביצועי יצירת קוד Liftoff ושיפור גם הקוד שנוצר.

גרסה קודמת: מה חדש ב- V8 גרסה 6.8

גרסת 6.8 של גוגל, שפורסמה ביולי 2018, מתמקדת בביצועים ובשימוש בזיכרון.

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

יישום חדש של Object.assign משפר ביצועים באמצעות הטמעה של נתיב מהיר עבור JavaScript.

הביצועים עבור TypedArays הוגדלו במקרים שבהם המיון נעשה באמצעות פונקציית השוואה.

תכונות חדשות אחרות ב- V8 גרסה 6.8 כוללות:

  • כדי לשפר את מהירות הביצוע בעזרת פורמט הקוד הנייד WebAssembly, מפתחים יכולים להשתמש בבדיקת גבולות מבוססת מלכודות, אופטימיזציה לניהול זיכרון, בפלטפורמות לינוקס x64.
  • צריכת הזיכרון של SFIs ( SharedFunctionInfo) הופחתה באמצעות דחיסה והסרה של שדות מיותרים.
  • גם כדי לשפר את יכולות הזיכרון, נשברה תלות ב- SFI בהן SFIs הוחזקו ללא צורך, מה שהוביל לסיכון של דליפות זיכרון.

גרסה קודמת: מה חדש ב- V8 גרסה 6.7

מנוע ה- JavaScript V8 של גוגל מקבל שיפורים בתכונות השפה ובאבטחה באמצעות סניף גרסה 6.7, שנמצא כעת במהדורת הייצור.

מנוע V8 6.7 BigIntתומך כברירת מחדל. צפוי בגרסה עתידית של ECMAScript,  BigIntsמשמש כפרימיטיבי מספרי ב- JavaScript כדי לייצג מספרים שלמים בדיוק שרירותי. עם BigInt, ניתן לבצע חשבון שלם מבלי לעלות על גדותיו. BigIntיכול לשמש בסיס BigDecimalליישום בסופו של דבר , שימושי לייצוג סכומי כסף בדיוק עשרוני.

בנוסף מופיעים ב- V8 6.7 הפחתות נוספות לפגיעות בערוץ צדדי, שנועדו למנוע דליפות מידע לקוד לא מהימן עבור JavaScript ו- WebAssemble.

גרסה קודמת: מה חדש ב- V8 גרסה 6.6

גרסה 6.6 של מנוע ה- JavaScript של V8 של גוגל מתמקדת בתכונות של שפת JavaScript וביכולות של אחסון קוד.

עבור JavaScript, Function.prototype.toString()מחזיר פרוסות מדויקות של טקסט קוד המקור, כולל רווח לבן ותגובות. V8 גרסה 6.6 גם מיישמת String.prototype.trimStart() and String.prototype.trimEnd(). יכולת זו הייתה זמינה דרך סטנדרטיות trimLeft()לבין trimRight()שיטות, אשר נשארות ככינויים של השיטות החדשות כדי לאפשר תאימות לאחור.

בנוסף, ניתן להשתמש בסמלי מפריד בין שורה לפסקה באותיות מילוליות, וכך להתאים ל- JSON. בעבר, אלה טופלו כמסיימי קו באותיות מילוליות, והשימוש בהם הביא לחריג של SyntaxError.

Array.prototype.values השיטה נותנת מערכים אותו ממשק איטרציה כמו ECMAScript 2015 Map ו Setהאוספים. אלה יכולים להיות אינטראקציה על ידי keys,values או entriesעל ידי קריאה למתודה בעלי אותו שם. שינוי זה עלול להיות לא תואם לקוד JavaScript קיים; מפתחים שמוצאים התנהגות מוזרה או שבורה באתר יכולים לנסות להשבית תכונה זו באמצעות chrome://flags/#enable-array-prototype-values.