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

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

تقليل عدد الطلبات إلى الخدمات الأخرى

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

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

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

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

تحتاج البرامج النصية عادةً إلى قراءة البيانات من جدول بيانات، وإجراء عمليات حسابية، ثم كتابة نتائج البيانات في جدول بيانات. تتضمّن لغة "برمجة تطبيقات 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 عمود، ويكتب بشكل متسلسل في 10,000 خلية. تساعد ذاكرة التخزين المؤقت للكتابة في Google Apps Script، لأنّها تفرض عملية الكتابة باستخدام flush في نهاية كل سطر. وبسبب التخزين المؤقت، يتم إجراء 100 طلب فقط إلى جدول البيانات.

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

  // 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).setBackgrounds(colors); 

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

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

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

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

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

  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 دقيقة.