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

تنظيم صفحاتك في مجموعات يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.

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

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

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

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

ميزات وقت تشغيل V8

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

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

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

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

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

تم تحسين اكتشاف وظائف برمجة التطبيقات في النصوص البرمجية التي تستخدم الإصدار 8. يتعرّف وقت التشغيل الجديد على تنسيقات تعريف الدوال:

      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');
  }
}

عرض السجلّات

توفّر "برمجة التطبيقات" خدمتَين لتسجيل الدخول، هما: خدمة Logger وفئة console. تعمل كلتا الخدمتين على كتابة السجلّات في خدمة Stackdriver Logging نفسها.

لعرض سجلّي 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. ضع علامة في مربّع الاختيار Enable Chrome V8 runtime (تفعيل وقت تشغيل Chrome V8).

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

  1. افتح مشروع "برمجة تطبيقات Google".
  2. على يمين الصفحة، انقر على إعدادات المشروع .
  3. ضَع علامة في مربّع الاختيار Show "appsscript.json" manifest file in محرر.
  4. على يمين الصفحة، انقر على أداة التعديل &gt؛ appsscript.json.
  5. في ملف البيان appsscript.json، اضبط الحقل runtimeVersion على القيمة V8.
  6. في أعلى الصفحة، انقر على حفظ مشروع .

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

تفعيل وقت تشغيل وحيد القرن

إذا كان النص البرمجي يستخدم V8 وتحتاج إلى تبديله لاستخدام وقت تشغيل Rhino الأصلي، نفِّذ ما يلي:

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

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

  1. افتح مشروع "برمجة تطبيقات Google".
  2. على يمين الصفحة، انقر على إعدادات المشروع .
  3. ضَع علامة في مربّع الاختيار Show "appsscript.json" manifest file in محرر.
  4. على يمين الصفحة، انقر على أداة التعديل &gt؛ appsscript.json.
  5. في ملف البيان appsscript.json، اضبط الحقل runtimeVersion على القيمة DEPRECATED_ES5.
  6. في أعلى الصفحة، انقر على حفظ مشروع .

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

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

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

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

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

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

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