Przegląd środowiska wykonawczego V8

W Apps Script i JavaScript środowisko wykonawcze lub środowisko wykonawcze zawiera mechanizm JavaScript, który analizuje i wykonuje kod skryptu. Środowisko uruchomieniowe określa zasady dostępu do pamięci, sposoby interakcji programu z systemem operacyjnym komputera oraz składni programów, które są zgodne z zasadami. Każda przeglądarka ma swoje środowisko wykonawcze dla JavaScriptu.

Do tej pory Apps Script korzystał z interpretera JavaScript Rhino firmy Mozilla. Rhino zapewniał wygodny sposób wykonywania skryptów programistycznych przez Apps Script, a jednocześnie wiązał Apps Script z konkretną wersją JavaScriptu (ES5). Deweloperzy Apps Script nie mogą używać bardziej nowoczesnej składni i funkcji JavaScript w skryptach korzystających ze środowiska wykonawczego Rhino.

Aby rozwiązać ten problem, Apps Script jest teraz obsługiwany przez środowisko wykonawcze V8, które obsługuje Chrome i Node.js. Możesz przenieść istniejące skrypty do wersji 8, aby skorzystać z nowoczesnej składni i funkcji JavaScriptu.

Na tej stronie opisaliśmy nowe funkcje udostępnione przez V8 oraz sposób włączania V8 do użycia w skryptach. W artykule Przenoszenie skryptów do V8 opisano czynności, które należy wykonać, aby przenieść istniejące skrypty do środowiska wykonawczego V8.

Funkcje środowiska wykonawczego V8

Skrypty korzystające ze środowiska wykonawczego V8 mogą korzystać z tych funkcji:

Nowoczesna składnia ECMAScript

W skryptach używających środowiska wykonawczego V8 możesz używać nowoczesnej składni ECMAScript. Ta składnia obejmuje let, const i wiele innych popularnych funkcji.

W przykładach składni V8 znajdziesz krótką listę popularnych ulepszeń składni, które możesz wprowadzić w środowisku wykonawczym V8.

Ulepszone wykrywanie funkcji

W przypadku skryptów używających V8 poprawiono wykrywanie funkcji Apps Script. Nowy runtime rozpoznaje te formaty definicji funkcji:

      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 () => {}

Wywołuj metody obiektów z aktywatorów i wywołań zwrotnych

Skrypty korzystające z V8 mogą wywoływać metody obiektów i metody statyczne klas z miejsc, w których można już wywoływać metody biblioteki. Te miejsca to:

Ten przykład V8 pokazuje użycie metod obiektu podczas tworzenia elementów menu w Arkuszach Google:

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');
  }
}

Wyświetl logi

Apps Script udostępnia 2 usługi rejestrowania: usługę Logger i klasę console. Obie te usługi zapisują logi w tej samej usłudze Stackdriver Logging.

Aby wyświetlić dzienniki Loggerconsole, u góry edytora skryptu kliknij Dziennik wykonywania.

Wyświetl uruchomienia

Aby wyświetlić historię wykonywania skryptu, otwórz projekt Apps Script i po lewej stronie kliknij Wykonania .

.

Przykłady składni V8

Poniżej znajduje się krótka lista popularnych funkcji składniowych dostępnych dla skryptów korzystających z środowiska wykonawczego V8.

letconst

Słowa kluczowe let i const umożliwiają definiowanie odpowiednio zmiennych lokalnych w bloku i stałych w bloku.

// 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
      

Funkcje strzałek

Funkcje strzałek zapewniają kompaktowy sposób definiowania funkcji w wyrażeniach.

// 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));
      

Zajęcia

Klasy umożliwiają uporządkowanie kodu za pomocą dziedziczenia. Klasy w V8 są głównie cukrem składniowym zamiast dziedziczenia opartego na prototypie 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)
      

Niszczenie przypisań

Wyrażenia przypisania z przekształcaniem to szybki sposób na rozpakowanie wartości z tablic i obiektów do oddzielnych zmiennych.

// 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


      

Literaly szablonu

Literały szablonów to literały tekstowe, które umożliwiają umieszczanie wyrażeń. Pozwalają one uniknąć bardziej złożonych instrukcji łączenia ciągów znaków.

// 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}`;


      

Parametry domyślne

Parametry domyślne umożliwiają określenie domyślnych wartości parametrów funkcji w deklaracji funkcji. Może to uprościć kod w ciele funkcji, ponieważ nie trzeba już jawnie przypisywać wartości domyślnych do brakujących parametrów.

// 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!"

      

Ciągi znaków wielowierszowych

Ciągi wielowierszowe możesz definiować za pomocą tej samej składni co literaly szablonu. Podobnie jak w przypadku literaliów szablonów, ta składnia pozwala uniknąć konkatenacji ciągów znaków i uprościć definicje ciągów znaków.

// 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`;
      

Włączam środowisko wykonawcze V8

Jeśli skrypt korzysta ze środowiska wykonawczego Rhino, możesz przełączyć go na V8, wykonując te czynności:

  1. Otwórz projekt Apps Script.
  2. Po lewej stronie kliknij Ustawienia projektu .
  3. Zaznacz pole wyboru Włącz środowisko wykonawcze Chrome V8.

Możesz też określić środowisko wykonawcze skryptu bezpośrednio, edytując plik manifestu skryptu:

  1. Otwórz projekt Apps Script.
  2. Po lewej stronie kliknij Ustawienia projektu .
  3. Zaznacz pole wyboru Pokaż plik manifestu „appsscript.json” w edytorze.
  4. Po lewej stronie kliknij Edytor appsscript.json.
  5. W pliku manifestu appsscript.json ustaw wartość pola runtimeVersion na V8.
  6. U góry kliknij Zapisz projekt .

W artykule Migracja skryptów do wersji 8 wyjaśniamy, jakie inne czynności należy wykonać, aby zapewnić prawidłowe działanie skryptu w wersji 8.

Włączanie środowiska wykonawczego Rhino

Jeśli Twój skrypt korzysta z V8 i chcesz przełączyć go na oryginalne środowisko wykonawcze Rhino, wykonaj te czynności:

  1. Otwórz projekt Apps Script.
  2. Po lewej stronie kliknij Ustawienia projektu .
  3. Odznacz pole wyboru Włącz środowisko wykonawcze Chrome 8.

Możesz też edytować plik manifestu skryptu:

  1. Otwórz projekt Apps Script.
  2. Po lewej stronie kliknij Ustawienia projektu .
  3. Zaznacz pole wyboru Wyświetlaj plik manifestu „appsscript.json” w edytorze.
  4. Po lewej stronie kliknij Edytor > appsscript.json.
  5. W pliku manifestu appsscript.json ustaw pole runtimeVersion na wartość DEPRECATED_ES5.
  6. U góry kliknij Zapisz projekt .

Jak przenieść istniejące skrypty?

W przewodniku Przenoszenie skryptów do V8 opisano czynności, które należy wykonać, aby przenieść istniejący skrypt do korzystania z V8. Polega to na włączeniu środowiska wykonawczego V8 i sprawdzeniu, czy skrypt nie zawiera żadnych znanych niezgodności.

Automatyczna migracja skryptów do wersji 8

Od 18 lutego 2020 r. Google zacznie stopniowo przenosić istniejące skrypty, które przejdą nasz automatyczny test zgodności, do V8. Po migracji te skrypty będą działać normalnie.

Jeśli chcesz wykluczyć skrypt z automatycznej migracji, ustaw w pliku manifestu pole runtimeVersion na DEPRECATED_ES5. W każdej chwili możesz ręcznie przenieść skrypt do V8.

Jak zgłaszać błędy?

Z przewodnika po pomocy dowiesz się, jak uzyskać pomoc w zakresie programowania w Stack Overflow, przeszukiwać istniejące raporty o problemach, zgłaszać nowe błędy i zgłaszać prośby o nowe funkcje.