Trong Apps Script và JavaScript, môi trường thời gian chạy hoặc môi trường thời gian chạy chứa công cụ JavaScript phân tích cú pháp và thực thi mã tập lệnh. Môi trường thời gian chạy cung cấp các quy tắc về cách truy cập bộ nhớ, cách chương trình có thể tương tác với hệ điều hành của máy tính và cú pháp chương trình nào là hợp pháp. Mỗi trang web trình duyệt có môi trường thời gian chạy dành cho JavaScript.
Trước đây, Apps Script được hỗ trợ bởi JavaScript Rhino của Mozilla phiên dịch. Mặc dù Rhino cung cấp một phương thức thuận tiện để thực thi Apps Script các tập lệnh của nhà phát triển, tập lệnh này cũng liên kết Apps Script với một phiên bản JavaScript cụ thể (ES5). Nhà phát triển Apps Script không thể sử dụng các tính năng và cú pháp JavaScript hiện đại hơn trong các tập lệnh bằng Rhino thời gian chạy.
Để giải quyết mối lo ngại này, Apps Script hiện được hỗ trợ bởi Môi trường thời gian chạy V8 hỗ trợ Chrome và Node.js. Bạn có thể di chuyển các tập lệnh hiện có sang V8 để tận dụng cú pháp và các tính năng JavaScript hiện đại.
Trang này mô tả các tính năng mới mà V8 bật và cách bạn có thể bật V8 để sử dụng trong tập lệnh của bạn. Di chuyển tập lệnh sang V8 mô tả các bước di chuyển tập lệnh hiện có để sử dụng thời gian chạy V8.
Các tính năng của thời gian chạy V8
Các tập lệnh sử dụng thời gian chạy V8 có thể tận dụng các tính năng sau tính năng:
Cú pháp ECMAScript hiện đại
Bạn có thể dùng ECMAScript hiện đại
trong các tập lệnh được môi trường thời gian chạy V8 hỗ trợ. Cú pháp này bao gồm
let
, const
và nhiều tính năng phổ biến khác.
Xem ví dụ về cú pháp V8 để biết danh sách ngắn các thuật ngữ phổ biến các cải tiến cú pháp mà bạn có thể thực hiện bằng cách sử dụng thời gian chạy V8.
Cải thiện khả năng phát hiện hàm
Tính năng phát hiện hàm Apps Script được cải thiện cho các tập lệnh sử dụng V8. Gói thuê bao mới thời gian chạy nhận ra các định dạng định nghĩa hàm sau:
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 () => {}
Gọi phương thức đối tượng từ các điều kiện kích hoạt và lệnh gọi lại
Những tập lệnh sử dụng V8 có thể gọi các phương thức đối tượng và phân lớp các phương thức tĩnh từ các địa điểm nơi bạn có thể gọi các phương thức thư viện. Những địa điểm này bao gồm sau:
- Điều kiện kích hoạt tệp kê khai tiện ích bổ sung cho Google Workspace
- Điều kiện kích hoạt có thể cài đặt
- Các mục trong trình đơn trong Google Workspace trình chỉnh sửa
- Hàm callback của người dùng, chẳng hạn như hàm được mô tả trong
Mã mẫu
ScriptApp.newStateToken()
.
Ví dụ về V8 sau đây cho thấy việc sử dụng các phương thức đối tượng khi tạo các mục trong trình đơn trong Google Trang tính:
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');
}
}
Xem nhật ký
Apps Script cung cấp hai dịch vụ ghi nhật ký:
Dịch vụ Logger
và
console
. Cả hai dịch vụ này
ghi nhật ký vào cùng một
Dịch vụ Ghi nhật ký Stackdriver.
Để hiển thị nhật ký Logger
và console
, ở đầu trình chỉnh sửa tập lệnh, hãy nhấp vào
Nhật ký thực thi.
Xem các lần thực thi
Để xem lịch sử thực thi tập lệnh của bạn, hãy mở dự án Apps Script và tại ở bên trái, hãy nhấp vào biểu tượng Các lần thực thi
.Ví dụ về cú pháp V8
Sau đây là danh sách ngắn gồm các tính năng cú pháp phổ biến mà bạn có thể sử dụng bằng cách sử dụng thời gian chạy V8.
let
và const
let
và const
từ khoá cho phép bạn xác định biến cục bộ phạm vi khối và phạm vi khối
hằng số.
// 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 |
Các hàm mũi tên
Các hàm mũi tên cung cấp một cách ngắn gọn để định nghĩa hàm trong biểu thức.
// 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)); |
Lớp
Lớp học cung cấp một phương tiện để sắp xếp mã có tính kế thừa về mặt lý thuyết. Lớp trong V8 chủ yếu là cú pháp dễ hiểu hơn tính kế thừa dựa trên nguyên mẫu 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) |
Huỷ cấu trúc thao tác chỉ định
Huỷ cấu trúc thao tác chỉ định biểu thức là một cách nhanh chóng để giải nén giá trị từ các mảng và đối tượng các biến riêng biệt.
// 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 |
Giá trị cố định của mẫu
Giá trị cố định của mẫu là các giá trị cố định kiểu chuỗi cho phép biểu thức được nhúng. Chúng giúp bạn tránh những câu lệnh nối chuỗi phức tạp hơn.
// 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}`; |
Tham số mặc định
Tham số mặc định cho phép bạn chỉ định giá trị mặc định cho các tham số hàm trong hàm khai báo. Việc này có thể giúp đơn giản hoá mã trong phần nội dung hàm vì nó sẽ xoá cần chỉ định rõ ràng các giá trị mặc định cho các tham số bị thiếu.
// 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!" |
Chuỗi nhiều dòng
Bạn có thể xác định chuỗi nhiều dòng sử dụng cú pháp giống như giá trị cố định của mẫu. Giống như giá trị cố định của mẫu, cú pháp này sẽ giúp bạn tránh việc nối chuỗi và đơn giản hoá định nghĩa chuỗi.
// 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`; |
Bật môi trường thời gian chạy V8
Nếu một tập lệnh đang sử dụng thời gian chạy Rhino, bạn có thể chuyển tập lệnh đó sang V8 bằng cách thực hiện những việc sau:
- Mở dự án Apps Script.
- Ở bên trái, hãy nhấp vào biểu tượng Cài đặt dự án .
- Chọn hộp đánh dấu Bật thời gian chạy Chrome V8.
Ngoài ra, bạn có thể trực tiếp chỉ định thời gian chạy của tập lệnh bằng cách chỉnh sửa tệp kê khai tập lệnh tệp:
- Mở dự án Apps Script.
- Ở bên trái, hãy nhấp vào biểu tượng Cài đặt dự án .
- Chọn tuỳ chọn Hiển thị "appsscript.json" tệp kê khai trong trình chỉnh sửa.
- Ở bên trái, hãy nhấp vào biểu tượng Trình chỉnh sửa
appsscript.json
.
>
- Trong tệp kê khai
appsscript.json
, hãy đặt giá trịruntimeVersion
thành giá trịV8
. - Ở trên cùng, hãy nhấp vào biểu tượng Lưu dự án .
Giải thích về việc di chuyển tập lệnh sang V8 các bước khác bạn nên thực hiện để đảm bảo tập lệnh của mình hoạt động tốt khi sử dụng V8.
Bật thời gian chạy Rhino
Nếu tập lệnh của bạn đang sử dụng V8 và bạn cần chuyển sang tập lệnh này để sử dụng phiên bản gốc Thời gian chạy của tê giác, hãy làm như sau:
- Mở dự án Apps Script.
- Ở bên trái, hãy nhấp vào biểu tượng Cài đặt dự án .
- Bỏ chọn hộp kiểm Bật thời gian chạy Chrome V8.
Ngoài ra, hãy chỉnh sửa tệp kê khai tập lệnh của bạn:
- Mở dự án Apps Script.
- Ở bên trái, hãy nhấp vào biểu tượng Cài đặt dự án .
- Chọn tuỳ chọn Hiển thị "appsscript.json" tệp kê khai trong trình chỉnh sửa.
- Ở bên trái, hãy nhấp vào biểu tượng Trình chỉnh sửa
appsscript.json
.
>
- Trong tệp kê khai
appsscript.json
, hãy đặt giá trịruntimeVersion
thành giá trịDEPRECATED_ES5
. - Ở trên cùng, hãy nhấp vào biểu tượng Lưu dự án .
Làm cách nào để di chuyển các tập lệnh hiện có?
Phần Di chuyển tập lệnh sang V8 hướng dẫn này mô tả các bước bạn cần thực hiện để di chuyển một tập lệnh hiện có sử dụng V8. Việc này bao gồm việc bật thời gian chạy V8 và kiểm tra tập lệnh cho bất kỳ điểm không tương thích đã biết nào.
Tự động di chuyển tập lệnh sang phiên bản 8
Kể từ ngày 18 tháng 2 năm 2020, Google sẽ bắt đầu di chuyển dần các dịch vụ các tập lệnh vượt qua bài kiểm tra khả năng tương thích tự động của chúng tôi đến V8. Các tập lệnh bị ảnh hưởng tiếp tục hoạt động bình thường sau khi di chuyển.
Nếu bạn muốn chọn không di chuyển tự động một tập lệnh, hãy đặt
runtimeVersion
trong tệp kê khai sang DEPRECATED_ES5
. Bạn có thể chọn theo cách thủ công
di chuyển tập lệnh sang V8 ở bất kỳ
thời gian sau đó.
Làm cách nào để báo cáo lỗi?
Hướng dẫn hỗ trợ giải thích cách lập trình trợ giúp về Stack Overflow, tìm kiếm báo cáo vấn đề hiện có, gửi lỗi mới và đưa ra yêu cầu về tính năng mới.