أفضل الممارسات

يسرد هذا المستند أفضل الممارسات التي ستساعدك على تحسين الأداء من نصوصك البرمجية.

تقليل المكالمات إلى الخدمات الأخرى

يُعد استخدام عمليات JavaScript ضمن النص البرمجي أسرع بكثير من الاتصال بخدمات أخرى أي شيء يمكنك تحقيقه ضمن "برمجة تطبيقات Google" نفسه أسرع بكثير من إجراء الاتصالات التي تحتاج إلى جلب البيانات من فإن خوادم Google أو أي خادم خارجي، مثل الطلبات إلى جداول البيانات، والمستندات، "مواقع Google" و"ترجمة Google" وUrlFetch وغيرها سيتم تشغيل النصوص البرمجية بشكل أسرع إذا أمكنك ذلك البحث عن طرق لتقليل المكالمات التي تجريها النصوص البرمجية إلى تلك الخدمات.

يمكنك التعاون باستخدام مساحات التخزين السحابي المشتركة.

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

استخدام العمليات المجمّعة

تحتاج البرامج النصية عادةً إلى قراءتها في البيانات من جدول بيانات وإجراء العمليات الحسابية ثم كتابة نتائج البيانات في جدول بيانات. تطبيقات Google يتضمّن النص البرمجي حاليًا بعض التحسينات المدمجة، مثل استخدام التخزين المؤقت السابق. لاسترداد ما يُحتمل أن يحصل عليه النص البرمجي وكتابة التخزين المؤقت لحفظ إمكانية تعيينها.

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

إليك مثال — مثال يجب عدم متابعته أو استخدامه. النص التعليمة البرمجية التالية لتعيين ألوان الخلفية لكل خلية في شبكة جدول بيانات مقاس 100 × 100. تستخدم كدالة مُسماة getColorFromCoordinates() (لا يظهر هنا) لتحديد اللون الذي يجب استخدامه لكل خلية:

  // DO NOT USE THIS CODE. It is an example of SLOW, INEFFICIENT code.
  // FOR DEMONSTRATION ONLY
  var cell = sheet.getRange('a1');
  for (var y = 0; y < 100; y++) {
    xcoord = xmin;
    for (var x = 0; x < 100; x++) {
      var c = getColorFromCoordinates(xcoord, ycoord);
      cell.offset(y, x).setBackgroundColor(c);
      xcoord += xincrement;
    }
    ycoord -= yincrement;
    SpreadsheetApp.flush();
  }

البرنامج النصي غير فعال: فهو يدور حول 100 صف و100 عمود، ويكتب بشكل متتالي إلى 10000 خلية. تساعد ذاكرة التخزين المؤقت للكتابة في برمجة Google Apps، لأنها تفرض الرجوع بالكتابة في نهاية كل سطر. لأنّ من التخزين المؤقت، يكون هناك 100 استدعاء فقط لجدول البيانات.

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

  // OKAY TO USE THIS EXAMPLE or code based on it.
  var cell = sheet.getRange('a1');
  var colors = new Array(100);
  for (var y = 0; y < 100; y++) {
    xcoord = xmin;
    colors[y] = new Array(100);
    for (var x = 0; x < 100; x++) {
      colors[y][x] = getColorFromCoordinates(xcoord, ycoord);
      xcoord += xincrement;
    }
    ycoord -= yincrement;
  }
  sheet.getRange(1, 1, 100, 100).setBackgroundColors(colors);

يستغرق تشغيل الرمز غير الفعّال حوالي 70 ثانية. تعمل الكود الفعال في ثانية واحدة فقط!

تجنُّب المكتبات التي تتضمن نصوصًا برمجية مليئة بواجهة المستخدم

المكتبات هي طريقة ملائمة لإعادة استخدام الرموز البرمجية لكنها تزيد بشكل طفيف من الوقت الذي يستغرقه بدء النص. هذا التأخير لا يمكن ملاحظته في النصوص البرمجية التي تستغرق فترة طويلة نسبيًا (مثل البرنامج النصي في الأداة المساعدة حذف ملفاتك في Google Drive)، لكن من جهة العميل خدمة HTML بشكل متكرر على المدى القصير google.script.run فإن التأخير سيؤثر على كل مكالمة. وبسبب هذه المشكلة، ينبغي للمكتبات باعتدال في الإضافات، وقد تحتاج إلى يجب تجنُّبها في النصوص البرمجية غير الإضافية التي تُجري العديد من طلبات google.script.run.

استخدام خدمة ذاكرة التخزين المؤقت

يمكنك استخدام خدمة ذاكرة التخزين المؤقت في ذاكرة التخزين المؤقت للموارد بين عمليات تنفيذ النصوص البرمجية. من خلال تخزين البيانات في ذاكرة التخزين المؤقت، يمكنك تقليل عدد المرات أو التكرار التي يتعين عليك بها استرجاع البيانات. لنفترض أنّ لديك خلاصة RSS على example.com تستغرق 20 ثانية ثانية للجلب، وتريد تسريع الوصول في متوسط الطلب. تشير رسالة الأشكال البيانية يوضح المثال أدناه كيفية استخدام خدمة ذاكرة التخزين المؤقت لتسريع الوصول إلى البيانات.

  function getRssFeed() {
    var cache = CacheService.getScriptCache();
    var cached = cache.get("rss-feed-contents");
    if (cached != null) {
      return cached;
    }
    // This fetch takes 20 seconds:
    var result = UrlFetchApp.fetch("http://example.com/my-slow-rss-feed.xml");
    var contents = result.getContentText();
    cache.put("rss-feed-contents", contents, 1500); // cache for 25 minutes
    return contents;
  }

الآن، بينما لا يزال عليك الانتظار لمدة 20 ثانية إذا لم يكن العنصر في ذاكرة التخزين المؤقت، ستكون عمليات الوصول اللاحقة سريعة جدًا إلى أن تنتهي صلاحية العنصر من ذاكرة التخزين المؤقت خلال 25 دقيقة.