ב-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 של אובייקטים ולסווג שיטות סטטיות ממקומות שבהם כבר תוכלו לקרוא לשיטות ספרייה. מקומות אלה כוללים את הבאים:
- טריגרים מניפסט לתוספים ל-Google Workspace
- טריגרים שאפשר להתקין
- אפשרויות בתפריט ב Google Workspace עורכים
- פונקציות הקריאה החוזרת של המשתמש, כמו שמתוארת
דוגמת קוד
ScriptApp.newStateToken()
.
בדוגמה הבאה של 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 על ידי לבצע את הפעולות הבאות:
- פותחים את פרויקט Apps Script.
- בצד ימין, לוחצים על הגדרות הפרויקט .
- מסמנים את התיבה הפעלת זמן הריצה של Chrome V8.
לחלופין אפשר לציין את סביבת זמן הריצה של הסקריפט באופן ישיר: עריכת המניפסט של הסקריפט file:
- פותחים את פרויקט Apps Script.
- בצד ימין, לוחצים על הגדרות הפרויקט .
- בוחרים באפשרות הצגת "appsscript.json" תיבת הסימון של קובץ מניפסט בעורך.
- בצד ימין, לוחצים על עריכה
appsscript.json
>
- בקובץ המניפסט
appsscript.json
, מגדירים את הערך הבא:runtimeVersion
לערךV8
. - למעלה, לוחצים על שמירת הפרויקט .
הסבר על העברה של סקריפטים ל-V8 שלבים נוספים שכדאי לבצע כדי לוודא שהסקריפט פועל כראוי באמצעות V8.
הפעלת סביבת זמן הריצה של Rhino
אם הסקריפט משתמש ב-V8 ועליך לשנות אותו כדי להשתמש בגרסה המקורית סביבת זמן ריצה של Rhino, מבצעים את הפעולות הבאות:
- פותחים את פרויקט Apps Script.
- בצד ימין, לוחצים על הגדרות הפרויקט .
- מבטלים את הסימון של התיבה הפעלת זמן הריצה של Chrome V8.
לחלופין, עורכים את המניפסט של הסקריפט:
- פותחים את פרויקט Apps Script.
- בצד ימין, לוחצים על הגדרות הפרויקט .
- בוחרים באפשרות הצגת "appsscript.json" תיבת הסימון של קובץ מניפסט בעורך.
- בצד ימין, לוחצים על עריכה
appsscript.json
>
- בקובץ המניפסט
appsscript.json
, מגדירים את הערך הבא:runtimeVersion
לערךDEPRECATED_ES5
. - למעלה, לוחצים על שמירת הפרויקט .
איך מעבירים סקריפטים קיימים?
העברת סקריפטים אל V8 המדריך מתאר את השלבים שצריך לבצע כדי להעביר סקריפט קיים אל להשתמש ב-V8. לצורך כך יש להפעיל את סביבת זמן הריצה של V8 ולבדוק את הסקריפט של אי התאמות ידועות.
העברה אוטומטית של סקריפטים ל-V8
החל מ-18 בפברואר 2020, Google תתחיל להעביר בהדרגה את הקיימות סקריפטים שעוברים את בדיקת התאימות האוטומטית שלנו ל-V8. הסקריפטים המושפעים ימשיכו לפעול כרגיל לאחר ההעברה.
אם רוצים לבטל את ההסכמה להעברה אוטומטית של סקריפט, צריך להגדיר
runtimeVersion
במניפסט שלו ל-DEPRECATED_ES5
. אפשר לבחור
להעביר את הסקריפט ל-V8 בכל שלב
לאחר מכן.
איך מדווחים על באגים?
במדריך התמיכה מוסבר איך מקבלים תכנות עזרה ב-Stack Overflow, חיפוש בדוחות על בעיות קיימות, דיווח על באגים חדשים לשלוח בקשות להוספת תכונות חדשות.