نظرة عامة على وقت تشغيل V8

في "برمجة تطبيقات Google" وJavaScript، يحتوي وقت التشغيل أو بيئة وقت التشغيل على محرك JavaScript الذي يحلّل رمز النص البرمجي وينفّذه. توفر بيئة التشغيل التي تحدّد كيفية الوصول إلى الذاكرة، وكيفية تفاعل البرنامج مع نظام تشغيل الكمبيوتر وما بناء جملة البرنامج القانوني. كل شبكة ويب في المتصفح بيئة وقت تشغيل لـ JavaScript.

في السابق، كانت "برمجة التطبيقات" مدعومة من خلال JavaScript Rhino من Mozilla أو المترجم الفوري. على الرغم من أنّ Rhino وفّر طريقة سهلة لتنفيذ "برمجة التطبيقات" النصوص البرمجية للمطوّرين، تم أيضًا ربط "برمجة تطبيقات Google" بإصدار محدّد من JavaScript (ES5) مطوّرو "برمجة تطبيقات Google" لا يمكنهم استخدام بنية JavaScript وميزات أكثر حداثة في النصوص البرمجية التي تستخدم Rhino وقت التشغيل.

لحل هذه المشكلة، أصبحت "برمجة التطبيقات" متاحة الآن من خلال V8 الذي يدعم Chrome وNode.js. يمكنك نقل النصوص البرمجية الحالية إلى V8 للاستفادة من بنية JavaScript الحديثة وميزاتها.

توضّح هذه الصفحة الميزات الجديدة التي يوفّرها المحرِّك V8 وطريقة تفعيله. للاستخدام في النصوص البرمجية. نقل النصوص البرمجية إلى V8 يصف خطوات نقل بيانات النصوص البرمجية الحالية لاستخدام بيئة التشغيل V8.

ميزات بيئة تشغيل V8

تتمكن النصوص البرمجية التي تستخدم وقت التشغيل V8 من الاستفادة مما يلي: الجديدة:

بنية ECMAScript الحديثة

يمكنك استخدام الإصدار الحديث من ECMAScript في النصوص البرمجية التي يدعمها وقت تشغيل V8. تتضمن بناء الجملة هذا let وconst والعديد من الميزات الرائجة الأخرى

يمكنك الاطّلاع على أمثلة على بنية V8 للحصول على قائمة مختصرة بالأمثلة الشائعة. التي يمكنك إجراؤها باستخدام وقت تشغيل V8.

رصد محسّن للوظائف

تم تحسين اكتشاف وظيفة "برمجة تطبيقات Google" للنصوص البرمجية التي تستخدم 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 () => {}

طرق عناصر طلب البيانات من العوامل المُشغِّلة ومعاودة الاتصال

يمكن للبرامج النصية التي تستخدم V8 استدعاء طرق الكائنات وفئة الطرق الثابتة من الأماكن حيث يمكنك بالفعل استدعاء طرق المكتبة. وتشمل هذه الأماكن التالي:

يوضح مثال 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');
  }
}

عرض السجلات

توفِّر "برمجة تطبيقات Google" خدمتَي تسجيل: خدمة Logger الصف console. كلتا الخدمتين وكتابة السجلات إلى Stackdriver Logging service (خدمة تسجيل Stackdriver)

لعرض سجلّات Logger وconsole، انقر على رمز برمجي في أعلى أداة تعديل النصوص البرمجية. سجلّ التنفيذ:

عرض عمليات التنفيذ

للاطّلاع على سجلّ تنفيذ النص البرمجي، افتح مشروع "برمجة تطبيقات Google" وعلى على يمين الصفحة، انقر على رمز عمليات التنفيذ .

أمثلة على بنية 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. افتح مشروع "برمجة تطبيقات Google".
  2. على يمين الصفحة، انقر على رمز إعدادات المشروع .
  3. ضع علامة في مربّع الاختيار تفعيل بيئة تشغيل Chrome V8.

بدلاً من ذلك، يمكنك تحديد وقت تشغيل النص البرمجي مباشرةً عن طريق تعديل بيان النص البرمجي الملف:

  1. افتح مشروع "برمجة تطبيقات Google".
  2. على يمين الصفحة، انقر على رمز إعدادات المشروع .
  3. حدِّد زر إظهار "appsscript.json" ملف البيان في المحرِّر.
  4. على يمين الصفحة، انقر على أداة التعديل >. appsscript.json.
  5. في ملف البيان appsscript.json، اضبط runtimeVersion إلى القيمة V8.
  6. في أعلى الشاشة، انقر على رمز حفظ المشروع .

تشرح مقالة نقل النصوص البرمجية إلى V8. الخطوات الأخرى التي يجب اتخاذها لضمان عمل النص البرمجي بشكل جيد باستخدام V8.

تفعيل بيئة تشغيل Rhino

إذا كان النص البرمجي يستخدم V8 وكنت بحاجة إلى تبديله لاستخدام الإصدار الأصلي بالنسبة إلى بيئة تشغيل Rhino، يمكنك إجراء ما يلي:

  1. افتح مشروع "برمجة تطبيقات Google".
  2. على يمين الصفحة، انقر على رمز إعدادات المشروع .
  3. أزِل العلامة من مربّع الاختيار تفعيل بيئة تشغيل Chrome V8.

يمكنك بدلاً من ذلك تعديل بيان النص البرمجي:

  1. افتح مشروع "برمجة تطبيقات Google".
  2. على يمين الصفحة، انقر على رمز إعدادات المشروع .
  3. حدِّد زر إظهار "appsscript.json" ملف البيان في المحرِّر.
  4. على يمين الصفحة، انقر على أداة التعديل >. appsscript.json.
  5. في ملف البيان appsscript.json، اضبط runtimeVersion إلى القيمة DEPRECATED_ES5.
  6. في أعلى الشاشة، انقر على رمز حفظ المشروع .

كيف يمكنني نقل النصوص البرمجية الحالية؟

نقل النصوص البرمجية إلى V8 الخطوات التي يتعين عليك اتخاذها لنقل نص برمجي حالي إلى تستخدم V8. تتضمن هذه العملية تفعيل بيئة التشغيل V8 والتحقق من البرنامج النصي أي عدم توافقات معروفة.

النقل التلقائي للنصوص البرمجية إلى V8

اعتبارًا من 18 شباط (فبراير) 2020، ستبدأ Google تدريجيًا في نقل البيانات الحالية النصوص البرمجية التي تجتاز اختبار التوافق التلقائي إلى V8. النصوص البرمجية المتأثرة الاستمرار في العمل بشكل طبيعي بعد الترحيل.

إذا كنت تريد إيقاف النقل التلقائي للنص البرمجي، اضبط runtimeVersion في ملف البيان الخاص به إلى DEPRECATED_ES5. يمكنك اختيار نقل النص البرمجي إلى V8 في أي وقت وبعده.

كيف يمكنني الإبلاغ عن الأخطاء؟

يشرح دليل الدعم كيفية بدء البرمجة المساعدة بشأن Stack Overflow والبحث في تقارير المشكلات الحالية والإبلاغ عن أخطاء جديدة تقديم طلبات ميزات جديدة.