סקירה כללית של זמן ריצה של V8

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

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

כדי לטפל בבעיה הזו, Apps Script נתמך עכשיו על ידי זמן ריצה של V8 שמפעיל את Chrome ואת Node.js. אפשר העברת סקריפטים קיימים אל V8 כדי לנצל את היתרונות של התחביר והתכונות המודרניות של JavaScript.

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

תכונות של זמן הריצה של V8

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

תחביר ECMAScript מודרני

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

אפשר לעיין בדוגמאות לתחביר V8 לקבלת רשימה קצרה של שיפורים בתחביר שאפשר לבצע באמצעות זמן הריצה של V8.

שיפור בזיהוי הפונקציות

זיהוי הפונקציה של Apps Script משופר לסקריפטים באמצעות V8. הגרסה החדשה סביבת זמן הריצה מזהה את הפורמטים הבאים להגדרת הפונקציות:

      function normalFunction() {}
      async function asyncFunction() {}
      function* generatorFunction() {}

      var varFunction = function() {}
      let letFunction = function() {}
      const constFunction = function() {}

      var namedVarFunction = function alternateNameVarFunction() {}
      let namedLetFunction = function alternateNameLetFunction() {}
      const namedConstFunction = function alternateNameConstFunction() {}

      var varAsyncFunction = async function() {}
      let letAsyncFunction = async function() {}
      const constAsyncFunction = async function() {}

      var namedVarAsyncFunction = async function alternateNameVarAsyncFunction() {}
      let namedLetAsyncFunction = async function alternateNameLetAsyncFunction() {}
      const namedConstAsyncFunction = async function alternateNameConstAsyncFunction() {}

      var varGeneratorFunction = function*() {}
      let letGeneratorFunction = function*() {}
      const constGeneratorFunction = function*() {}

      var namedVarGeneratorFunction = function* alternateNameVarGeneratorFunction() {}
      let namedLetGeneratorFunction = function* alternateNameLetGeneratorFunction() {}
      const namedConstGeneratorFunction = function* alternateNameConstGeneratorFunction() {}

      var varLambda = () => {}
      let letLambda = () => {}
      const constLambda = () => {}

      var varAsyncLambda = async () => {}
      let letAsyncLambda = async () => {}
      const constAsyncLambda = async () => {}

קריאה ל-methods של אובייקטים מטריגרים ומקריאות חוזרות

סקריפטים שמשתמשים ב-V8 יכולים לקרוא ל-methods של אובייקטים ולסווג שיטות סטטיות ממקומות שבהם כבר תוכלו לקרוא לשיטות ספרייה. מקומות אלה כוללים את הבאים:

בדוגמה הבאה של V8 מוצג שימוש ב-methods של אובייקטים כשיוצרים אפשרויות בתפריט ב-Google Sheets:

function onOpen() {
  var ui = SpreadsheetApp.getUi(); // Or DocumentApp, SlidesApp, or FormApp.
  ui.createMenu('Custom Menu')
      .addItem('First item', 'menu.item1')
      .addSeparator()
      .addSubMenu(ui.createMenu('Sub-menu')
          .addItem('Second item', 'menu.item2'))
      .addToUi();
}

var menu = {
  item1: function() {
    SpreadsheetApp.getUi().alert('You clicked: First item');
  },
  item2: function() {
    SpreadsheetApp.getUi().alert('You clicked: Second item');
  }
}

צפייה ביומנים

ב-Apps Script יש שני שירותי רישום ביומן: שירות Logger וגם כיתה console. שני השירותים האלה לכתוב יומנים שירות Stackdriver Logging.

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

הצגת הרצות של הביצוע

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

דוגמאות לתחביר V8

הנה רשימה קצרה של תכונות תחביריות פופולריות שזמינות עבור באמצעות זמן הריצה של V8.

let וגם const

let ו-const מילות מפתח מאפשרות להגדיר משתנים מקומיים עם היקף חסימה והיקף בלוקים קבועים, בהתאמה.

// V8 runtime
let s = "hello";
if (s === "hello") {
  let s = "world";
  console.log(s);  // Prints "world"
}
console.log(s);  // Prints "hello"

const N = 100;
N = 5; // Results in TypeError
      

פונקציות חיצים

פונקציות חיצים לספק דרך קומפקטית להגדרת פונקציות בתוך ביטויים.

// Rhino runtime
function square(x) {
  return x * x;
}

console.log(square(5));  // Outputs 25
      
// V8 runtime
const square = x => x * x;
console.log(square(5));  // Outputs 25

// Outputs [1, 4, 9]
console.log([1, 2, 3].map(x => x * x));
      

שיעורים

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

// V8 runtime
class Rectangle {
  constructor(width, height) { // class constructor
    this.width = width;
    this.height = height;
  }

  logToConsole() { // class method
    console.log(`Rectangle(width=${this.width}, height=${this.height})`);
  }
}

const r = new Rectangle(10, 20);
r.logToConsole();  // Outputs Rectangle(width=10, height=20)
      

בניית מטלות

יצירת מטלה ביטויים הם דרך מהירה לפרוק ערכים ממערכים ואובייקטים משתנים נפרדים.

// Rhino runtime
var data = {a: 12, b: false, c: 'blue'};
var a = data.a;
var c = data.c;
console.log(a, c);  // Outputs 12 "blue"

var array = [1, 2, 3];
var x = a[0];
var y = a[1];
var z = a[2];
console.log(x, y, z);  // Outputs 1 2 3
      
// V8 runtime
var data = {a: 12, b: false, c: 'blue'};
var {a, c} = data;
console.log(a, c);  // Outputs 12 "blue"


var array = [1, 2, 3];
var [x, y, z] = array;
console.log(x, y, z);  // Outputs 1 2 3


      

מילת המפתח של התבנית

ליטרלים של תבניות הם ליטרלים של מחרוזות שמאפשרים ביטויים מוטמעים. הם מאפשרים להימנע הצהרות שרשור מורכבות יותר.

// Rhino runtime
var name =
  'Hi ' + first + ' ' + last + '.';
var url =
  'http://localhost:3000/api/messages/'
  + id;
      
// V8 runtime
var name = `Hi ${first} ${last}.`;
var url =
  `http://localhost:3000/api/messages/${id}`;


      

פרמטרים שמוגדרים כברירת מחדל

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

// Rhino runtime
function hello(greeting, name) {
    greeting = greeting || "hello";
    name = name || "world";
    console.log(
        greeting + " " + name + "!");
}

hello();  // Outputs "hello world!"
      
// V8 runtime
var hello =
  function(greeting="hello", name="world") {
      console.log(
        greeting + " " + name + "!");
  }

hello();  // Outputs "hello world!"

      

מחרוזות מרובות שורות

אפשר להגדיר מחרוזות מרובות שורות באמצעות תחביר זהה לזה של ליטרל תבנית. בדומה ל- מילוליות של תבניות, תחביר זה מאפשר להימנע משרשורי מחרוזות ולפשט הגדרות למחרוזות.

// Rhino runtime
var multiline = "This string is sort of\n"
+ "like a multi-line string,\n"
+ "but it's not really one.";
      
// V8 runtime
var multiline = `This on the other hand,
actually is a multi-line string,
thanks to JavaScript ES6`;
      

הפעלת סביבת זמן הריצה של V8

אם סקריפט משתמש בסביבת זמן הריצה של Rhino, אפשר לשנות אותו ל-V8 על ידי לבצע את הפעולות הבאות:

  1. פותחים את פרויקט Apps Script.
  2. בצד ימין, לוחצים על הגדרות הפרויקט .
  3. מסמנים את התיבה הפעלת זמן הריצה של Chrome V8.

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

  1. פותחים את פרויקט Apps Script.
  2. בצד ימין, לוחצים על הגדרות הפרויקט .
  3. בוחרים באפשרות הצגת "appsscript.json" תיבת הסימון של קובץ מניפסט בעורך.
  4. בצד ימין, לוחצים על עריכה > appsscript.json
  5. בקובץ המניפסט appsscript.json, מגדירים את הערך הבא: runtimeVersion לערך V8.
  6. למעלה, לוחצים על שמירת הפרויקט .

הסבר על העברה של סקריפטים ל-V8 שלבים נוספים שכדאי לבצע כדי לוודא שהסקריפט פועל כראוי באמצעות V8.

הפעלת סביבת זמן הריצה של Rhino

אם הסקריפט משתמש ב-V8 ועליך לשנות אותו כדי להשתמש בגרסה המקורית סביבת זמן ריצה של Rhino, מבצעים את הפעולות הבאות:

  1. פותחים את פרויקט Apps Script.
  2. בצד ימין, לוחצים על הגדרות הפרויקט .
  3. מבטלים את הסימון של התיבה הפעלת זמן הריצה של Chrome V8.

לחלופין, עורכים את המניפסט של הסקריפט:

  1. פותחים את פרויקט Apps Script.
  2. בצד ימין, לוחצים על הגדרות הפרויקט .
  3. בוחרים באפשרות הצגת "appsscript.json" תיבת הסימון של קובץ מניפסט בעורך.
  4. בצד ימין, לוחצים על עריכה > appsscript.json
  5. בקובץ המניפסט appsscript.json, מגדירים את הערך הבא: runtimeVersion לערך DEPRECATED_ES5.
  6. למעלה, לוחצים על שמירת הפרויקט .

איך מעבירים סקריפטים קיימים?

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

העברה אוטומטית של סקריפטים ל-V8

החל מ-18 בפברואר 2020, Google תתחיל להעביר בהדרגה את הקיימות סקריפטים שעוברים את בדיקת התאימות האוטומטית שלנו ל-V8. הסקריפטים המושפעים ימשיכו לפעול כרגיל לאחר ההעברה.

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

איך מדווחים על באגים?

במדריך התמיכה מוסבר איך מקבלים תכנות עזרה ב-Stack Overflow, חיפוש בדוחות על בעיות קיימות, דיווח על באגים חדשים לשלוח בקשות להוספת תכונות חדשות.