ใน 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 () => {}
เรียกเมธอดออบเจ็กต์จากทริกเกอร์และ Callback
สคริปต์ที่ใช้ V8 สามารถเรียกเมธอดออบเจ็กต์และเมธอดแบบคงที่ของคลาสจากสถานที่ต่างๆ ได้ ซึ่งใช้เรียกเมธอดไลบรารีได้อยู่แล้ว ตัวอย่างเหล่านี้ได้แก่ ดังต่อไปนี้:
- ทริกเกอร์ไฟล์ Manifest ส่วนเสริมของ Google Workspace
- ทริกเกอร์ที่ติดตั้งได้
- รายการในเมนูใน Google Workspace เครื่องมือแก้ไข
- ฟังก์ชัน Callback ของผู้ใช้ตามที่อธิบายไว้ใน
ตัวอย่างโค้ด
ScriptApp.newStateToken()
ตัวอย่าง V8 ต่อไปนี้แสดงการใช้เมธอดออบเจ็กต์เมื่อสร้าง รายการเมนูใน 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');
}
}
ดูบันทึก
Apps Script มีบริการการบันทึก 2 บริการ ได้แก่
บริการของ Logger
และ
console
ชั้นเรียน ทั้ง 2 บริการนี้
เขียนบันทึกลงใน
บริการ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
อีกทางเลือกหนึ่งคือ คุณสามารถระบุรันไทม์ของสคริปต์ได้โดยตรงโดย การแก้ไขไฟล์ Manifest ของสคริปต์ ไฟล์:
- เปิดโครงการ Apps Script
- คลิกการตั้งค่าโปรเจ็กต์ ทางด้านซ้าย
- เลือกช่องทำเครื่องหมายแสดง "appsscript.json" Manifest ในตัวแก้ไข
- ทางด้านซ้าย ให้คลิกตัดต่อวิดีโอ
appsscript.json
>
- ในไฟล์ Manifest
appsscript.json
ให้ตั้งค่าruntimeVersion
เป็นค่าV8
- คลิกบันทึกโปรเจ็กต์ ที่ด้านบน
คำอธิบายเรื่องการย้ายข้อมูลสคริปต์ไปยัง V8 ขั้นตอนอื่นๆ ที่คุณควรดำเนินการเพื่อให้มั่นใจว่าสคริปต์ของคุณทำงานได้ดีเมื่อใช้ V8
กำลังเปิดใช้รันไทม์ของ Rhino
หากสคริปต์ของคุณใช้ V8 อยู่ และคุณต้องเปลี่ยนไปใช้เวอร์ชันเดิม รันไทม์ของ Rhino ให้ทำดังต่อไปนี้
- เปิดโครงการ Apps Script
- คลิกการตั้งค่าโปรเจ็กต์ ทางด้านซ้าย
- ล้างช่องทำเครื่องหมายเปิดใช้รันไทม์ของ Chrome V8
หรือแก้ไขไฟล์ Manifest ของสคริปต์โดยทำดังนี้
- เปิดโครงการ Apps Script
- คลิกการตั้งค่าโปรเจ็กต์ ทางด้านซ้าย
- เลือกช่องทำเครื่องหมายแสดง "appsscript.json" Manifest ในตัวแก้ไข
- ทางด้านซ้าย ให้คลิกตัดต่อวิดีโอ
appsscript.json
>
- ในไฟล์ Manifest
appsscript.json
ให้ตั้งค่าruntimeVersion
เป็นค่าDEPRECATED_ES5
- คลิกบันทึกโปรเจ็กต์ ที่ด้านบน
ฉันจะย้ายข้อมูลสคริปต์ที่มีอยู่ได้อย่างไร
การย้ายข้อมูลสคริปต์ไปยัง V8 อธิบายขั้นตอนที่คุณต้องทำเพื่อย้ายสคริปต์ที่มีอยู่ไปยัง ใช้ V8 ซึ่งรวมถึงการเปิดใช้รันไทม์ V8 และตรวจสอบสคริปต์สำหรับ ความไม่เข้ากันที่ทราบ
การย้ายข้อมูลสคริปต์ไปยัง V8 โดยอัตโนมัติ
ตั้งแต่วันที่ 18 กุมภาพันธ์ 2020 เป็นต้นไป Google จะเริ่มทยอยย้ายข้อมูลที่มีอยู่ ผ่านการทดสอบความเข้ากันได้แบบอัตโนมัติกับ V8 สคริปต์ที่ได้รับผลกระทบ ยังคงทำงานได้ตามปกติหลังจากการย้ายข้อมูล
หากคุณต้องการเลือกไม่ใช้สคริปต์ผ่านการย้ายข้อมูลอัตโนมัติ ให้ตั้งค่า
runtimeVersion
ในไฟล์ Manifest ไปยัง DEPRECATED_ES5
คุณสามารถเลือก
ย้ายสคริปต์ไปยัง V8 ได้ทุกเมื่อ
ระยะเวลาการใช้งานหลังจากนั้น
ฉันจะรายงานข้อบกพร่องได้อย่างไร
คู่มือการสนับสนุนอธิบายวิธีรับการเขียนโปรแกรม ความช่วยเหลือเกี่ยวกับ Stack Overflow, ค้นหารายงานปัญหาที่มีอยู่, รายงานข้อบกพร่องใหม่ และ ส่งคำขอฟีเจอร์ใหม่