V8 런타임 개요

Apps Script 및 JavaScript에서 런타임 또는 런타임 환경에는 다음이 포함됩니다. 스크립트 코드를 파싱하고 실행하는 자바스크립트 엔진입니다. 런타임은 메모리에 액세스하는 방법, 프로그램이 메모리에 액세스하는 방법과 프로그램이 어떤 프로그램 구문이 합법적인지 파악합니다. 각 웹 JavaScript용 런타임 환경이 있습니다.

예전부터 Apps Script는 Mozilla의 Rhino JavaScript를 기반으로 했습니다. 통역해 줍니다. Rhino는 Apps Script를 편리하게 실행할 수 있는 방법을 제공했습니다. 또한 Apps Script를 특정 JavaScript 버전에 (ES5) Apps Script 개발자 Rhino를 사용하는 스크립트에서 최신 JavaScript 구문과 기능을 사용할 수 없음 런타임 환경입니다

이 문제를 해결하기 위해 이제 Chrome 및 Node.js를 지원하는 V8 런타임입니다. 다음과 같은 작업을 할 수 있습니다. 기존 스크립트를 V8로 마이그레이션 최신 JavaScript 구문과 기능을 활용할 수 있습니다.

이 페이지에서는 V8에서 사용 설정하는 새로운 기능과 V8을 사용 설정하는 방법을 설명합니다. 사용할 수 있습니다. V8로 스크립트 이전 에서는 V8 런타임을 사용하기 위해 기존 스크립트를 마이그레이션하는 단계를 설명합니다.

V8 런타임의 기능

V8 런타임을 사용하는 스크립트는 다음을 활용할 수 있습니다. 기능:

최신 ECMAScript 구문

최신 ECMAScript를 사용하여 구문을 사용합니다. 이 구문에는 다음이 포함됩니다. let, const 외 여러 인기 기능

자주 사용되는 간단한 목록은 V8 구문의 예를 참고하세요. 문법 개선을 살펴봤습니다.

함수 감지 개선

V8을 사용하는 스크립트의 Apps Script 기능 감지가 개선되었습니다. 새로운 런타임은 다음 함수 정의 형식을 인식합니다.

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

트리거 및 콜백에서 객체 메서드 호출

V8을 사용하는 스크립트는 장소에서 객체 메서드와 클래스 정적 메서드를 호출할 수 있습니다. 이미 라이브러리 메서드를 호출할 수 있었습니다. 이러한 장소에는 있습니다.

다음 V8 예에서는 구성 시 객체 메서드를 사용하는 방법을 보여줍니다. 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 클래스). 두 서비스 모두 동일한 Cloud Shell에 Stackdriver Logging 서비스.

Loggerconsole 로그를 표시하려면 스크립트 편집기 상단에서 다음을 클릭합니다. 실행 로그.

실행 보기

스크립트의 실행 기록을 보려면 Apps Script 프로젝트를 열고 왼쪽에서 실행 을 클릭합니다.

V8 구문 예시

다음은 널리 사용되는 구문적 기능을 요약한 간략한 목록입니다. 스크립트를 실행할 수 있습니다.

letconst

letconst 키워드를 사용하면 블록 범위 로컬 변수와 블록 범위를 정의할 수 있습니다. 상수를 각각 사용합니다.

// 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 런타임 사용 체크박스를 선택합니다.

또는 다음과 같이 스크립트 런타임을 직접 지정할 수 있습니다. 스크립트 매니페스트 수정은 파일:

  1. Apps Script 프로젝트를 엽니다.
  2. 왼쪽에서 프로젝트 설정 을 클릭합니다.
  3. 편집기에 'appsscript.json' 매니페스트 파일 표시 체크박스를 선택합니다.
  4. 왼쪽에서 편집기 >를 클릭합니다. appsscript.json
  5. appsscript.json 매니페스트 파일에서 runtimeVersion 필드를 V8 값으로 변경합니다.
  6. 상단에서 프로젝트 저장 을 클릭합니다.

V8로 스크립트 이전에서는 V8을 사용하여 스크립트가 제대로 작동하는지 확인하기 위해 수행해야 하는 다른 단계를 참조하세요.

Rhino 런타임 사용 설정

스크립트에서 V8을 사용 중이고 원본 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로 스크립트 자동 이전

2020년 2월 18일부터 Google에서는 기존 Google의 자동 호환성 테스트를 V8로 통과한 스크립트의 경우 영향을 받은 스크립트 이전 후에도 정상적으로 계속 작동합니다.

스크립트에서 자동 이전을 선택 해제하려면 runtimeVersion 드림 필드를 DEPRECATED_ES5로 설정합니다. 수동으로 언제든지 스크립트를 V8로 이전 확인할 수 있습니다.

버그를 신고하려면 어떻게 해야 하나요?

프로그래밍을 받는 방법은 지원 가이드에서 설명합니다. Stack Overflow에 대한 도움말, 기존 문제 보고서 검색, 새 버그 신고 및 새로운 기능을 요청할 수 있습니다