Omówienie środowiska wykonawczego V8

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

W środowisku Apps Script i kodzie JavaScript środowisko wykonawczy lub środowisko wykonawczy zawiera kod JavaScript, który analizuje i wykonuje kod skryptu. Środowisko wykonawcze zawiera reguły dotyczące uzyskiwania dostępu do pamięci, sposobu interakcji programu z systemem operacyjnym komputera oraz składni programu zgodnie z prawem. Każda przeglądarka ma środowisko wykonawcze JavaScript.

W przeszłości skrypt Apps Script był hostowany przez narzędzie Mozilla's Rhino JavaScript. Rhino zapewniał wygodny sposób wykonywania skryptów dla programistów, ale dodatkowo łączył się z konkretną wersją JavaScriptu (ES5). Deweloperzy Apps Script nie mogą korzystać z nowoczesnej składni JavaScriptu i funkcji w skryptach za pomocą ś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 V8, aby korzystać z nowoczesnej składni i funkcji JavaScriptu.

Na tej stronie opisujemy nowe funkcje włączone w V8 i sposób ich użycia w skryptach. Migracja skryptów do wersji 8 zawiera instrukcje migracji istniejących skryptów do środowiska wykonawczego V8.

Funkcje środowiska wykonawczego V8

Skrypty, które korzystają ze środowiska wykonawczego V8, mogą korzystać z tych funkcji:

Nowoczesna składnia ECMAScript

W skryptach obsługiwanych przez środowisko wykonawcze V8 możesz używać nowoczesnej składni ECMAScript. Ta składnia obejmuje let, const i wiele innych popularnych funkcji.

Zobacz przykłady składni V8, aby zobaczyć krótką listę popularnych ulepszeń składni, które możesz wykorzystać w środowisku wykonawczym V8.

Ulepszone wykrywanie funkcji

Wykrywanie funkcji Apps Script jest łatwiejsze w przypadku skryptów używających V8. Nowy środowisko wykonawcze 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 () => {}

Metody wywoływania obiektów z aktywatorów i wywołań zwrotnych

Skrypty korzystające z V8 mogą wywoływać metody obiektów i klasy statyczne z miejsc, w których można wywoływać metody biblioteki. Są to między innymi:

Poniższy przykład wersji V8 pokazuje użycie metod obiektów 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 zapewnia 2 usługi logowania: usługę Logger i klasę console. Obie te usługi zapisują logi w tej samej usłudze Stackdriver Logging.

Aby wyświetlić logi Logger i console, u góry edytora skryptów kliknij Dziennik wykonywania.

Wyświetl wykonania

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

Przykłady składni V8

Poniżej znajduje się krótka lista popularnych funkcji składniowych dostępnych w skryptach za pomocą środowiska wykonawczego V8.

letconst

Słowa kluczowe let i const umożliwiają zdefiniowanie odpowiednio lokalnych zmiennych zakresu zablokowanego i blokowanie stałych zakresu.

// 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 pozwalają kompaktowo definiować funkcje 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

Klasa umożliwia koncepcyjnie uporządkowanie kodu za pomocą dziedziczenia. Klasy w wersji V8 to głównie cukier składni zamiast dziedziczenia oparte na prototypowym kodzie 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 projektów

Wyrażenia zniszczenia przypisań pozwalają szybko rozpakować wartości z tablic i obiektów do różnych 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


      

Litery szablonu

Literały szablonów to literały ciągu, które zezwalają na umieszczone wyrażenia. Pozwalają one unikać 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 pozwalają określić wartości domyślne parametrów funkcji w deklaracji funkcji. Może to uprościć kod w treści funkcji, ponieważ nie ma potrzeby bezpośredniego przypisywania wartości domyślnych do 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 wielowierszowe

Możesz zdefiniować ciągi wielowierszowe, korzystając z tej samej składni co literatury szablonu. Podobnie jak w przypadku literałów szablonów, ta składnia pozwala uniknąć łączenia ciągów znaków i upraszcza ich definicje.

// 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 używa środowiska wykonawczego Rhino, możesz przełączyć je na wersję 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.

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

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

W artykule Migracja skryptów do wersji 8 znajdziesz inne instrukcje, które pomogą Ci prawidłowo skonfigurować skrypt w wersji 8.

Włączam środowisko wykonawcze Rhino

Jeśli Twój skrypt korzysta z wersji V8 i chcesz go przełączyć na korzystanie z oryginalnego środowiska wykonawczego 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 V8.

Możesz też edytować plik manifestu skryptu:

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

Jak przenieść obecne skrypty?

Przewodnik po migracji skryptów do wersji 8 zawiera opis czynności, które musisz wykonać, aby przenieść dotychczasowy skrypt do wersji 8. Obejmuje to włączenie środowiska wykonawczego V8 i sprawdzenie skryptu pod kątem ewentualnych znanych niezgodności.

Automatyczna migracja skryptów do V8

18 lutego 2020 r. Google zacznie stopniowo przenosić dotychczasowe skrypty, które przeszły nasz automatyczny test zgodności do wersji 8. Po migracji skrypty, które zostały zablokowane, będą działać normalnie.

Jeśli chcesz wyłączyć automatyczną migrację skryptu, ustaw w pliku manifestu pole runtimeVersion na DEPRECATED_ES5. W dowolnym momencie możesz ręcznie przenieść skrypt do wersji 8.

Jak zgłaszać błędy?

Z przewodnika pomocy dowiesz się, jak uzyskać pomoc w programowaniu w usłudze Stack Overflow, przeszukać istniejące raporty problemów, zgłosić nowe błędy i poprosić o nowe funkcje.