V8 रनटाइम की खास जानकारी

Apps Script और JavaScript में, रनटाइम या रनटाइम एनवायरमेंट में यह शामिल होता है यह JavaScript इंजन, जो स्क्रिप्ट कोड को पार्स और लागू करता है. रनटाइम से ये सुविधाएं मिलती हैं मेमोरी को ऐक्सेस करने के तरीके और प्रोग्राम और कौनसा प्रोग्राम सिंटैक्स कानूनी है. हर वेब ब्राउज़र में JavaScript के लिए रनटाइम एनवायरमेंट होता है.

ऐतिहासिक रूप से, Apps Script में Mozilla के Rhino JavaScript की मदद से काम किया जाता है अनुवादक. हालांकि, Rhino ने Apps Script को एक्ज़ीक्यूट करने के लिए एक आसान तरीका उपलब्ध कराया है डेवलपर स्क्रिप्ट के साथ-साथ इसने Apps Script को एक खास JavaScript वर्शन के साथ भी जोड़ा है. (ES5). Apps Script डेवलपर Rhino का इस्तेमाल करके स्क्रिप्ट में ज़्यादा आधुनिक JavaScript सिंटैक्स और सुविधाओं का इस्तेमाल नहीं किया जा सकता रनटाइम.

इस समस्या को हल करने के लिए, Apps Script के साथ अब Chrome और Node.js को चलाने के लिए, V8 रनटाइम. आप मौजूदा स्क्रिप्ट को V8 पर माइग्रेट करना ताकि आपको नए JavaScript सिंटैक्स और सुविधाओं का फ़ायदा मिल सके.

इस पेज पर, V8 की नई सुविधाओं के बारे में जानकारी दी गई है. साथ ही, V8 को चालू करने का तरीका भी बताया गया है अपनी स्क्रिप्ट में इस्तेमाल करने के लिए. स्क्रिप्ट को V8 पर माइग्रेट करना V8 रनटाइम का इस्तेमाल करने के लिए, मौजूदा स्क्रिप्ट को माइग्रेट करने का तरीका बताया गया है.

V8 रनटाइम की सुविधाएं

V8 रनटाइम का इस्तेमाल करने वाली स्क्रिप्ट से इन चीज़ों का फ़ायदा मिल सकता है सुविधाएँ:

आधुनिक ECMAScript सिंटैक्स

आप आधुनिक ECMAScript का इस्तेमाल कर सकते हैं जो V8 रनटाइम की मदद से काम करती हैं. इस सिंटैक्स में शामिल हैं let, const, और कई अन्य लोकप्रिय सुविधाएं.

लोकप्रिय जगहों की छोटी सूची के लिए V8 सिंटैक्स के उदाहरण देखें सिंटैक्स सुधार हैं, जो 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 क्लास. ये दोनों सेवाएं इसी के लिए लॉग लिखें स्टैकड्राइवर लॉगिंग सेवा.

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 में स्विच करने के लिए ऐसा किया जा सकता है ये काम किए जा सकते हैं:

  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 का इस्तेमाल करके स्क्रिप्ट के सही तरीके से काम करने के लिए भी आपको कुछ और करने की ज़रूरत है.

राइनो रनटाइम चालू करना

अगर आपकी स्क्रिप्ट में V8 का इस्तेमाल किया जा रहा है और आपको ओरिजनल स्क्रिप्ट का इस्तेमाल करने के लिए इसे बदलना होगा गैंडे का रनटाइम, ये काम करें:

  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 पर अपने-आप माइग्रेट करना

Google 18 फ़रवरी, 2020 से मौजूदा ग्राहकों का डेटा धीरे-धीरे माइग्रेट करना शुरू करेगा ऐसी स्क्रिप्ट जो V8 के साथ काम करने से जुड़ी हमारी अपने-आप होने वाली जांच में पास हो जाती हैं. वे स्क्रिप्ट जिन पर असर पड़ा है माइग्रेशन के बाद, सामान्य रूप से काम करना जारी रखेगा.

अगर आपको स्क्रिप्ट के अपने-आप होने वाले माइग्रेशन से ऑप्ट आउट करना है, तो runtimeVersion फ़ील्ड को अपने मेनिफ़ेस्ट में DEPRECATED_ES5 पर सबमिट करें. आप इन्हें मैन्युअल तरीके से चुन सकते हैं किसी भी समय स्क्रिप्ट को V8 पर माइग्रेट करें उससे कुछ समय बाद.

मैं गड़बड़ियों की शिकायत कैसे करूं?

सहायता गाइड में प्रोग्रामिंग की सुविधा पाने का तरीका बताया गया है Stack Overflow पर मदद पाएं, मौजूदा समस्या की रिपोर्ट खोजें, नई गड़बड़ियां दर्ज करें, और नई सुविधा का अनुरोध करना.