يسرد هذا المستند أفضل الممارسات لتحسين أداء النصوص البرمجية.
تقليل عدد الطلبات إلى الخدمات الأخرى
إنّ استخدام عمليات JavaScript ضمن النص البرمجي أسرع من استدعاء خدمات أخرى. إنّ أي إجراء تنفّذه ضمن "برمجة تطبيقات Google" يكون أسرع من استرداد البيانات من خوادم Google أو خادم خارجي، مثل الطلبات إلى "جداول بيانات Google" و"مستندات Google" و"مواقع Google" و"ترجمة Google" وUrlFetch. ستعمل النصوص البرمجية بشكل أسرع إذا قلّلت عدد طلبات الخدمة.
التعاون باستخدام مساحات التخزين السحابي المشتركة
إذا كنت تعمل على مشروع نص برمجي مع مطوّرين آخرين، يمكنك التعاون باستخدام مساحات التخزين السحابي المشتركة. تمتلك المجموعة الملفات في مساحة التخزين السحابي المشتركة وليس الأفراد، ما يسهّل عملية تطوير المشاريع وصيانتها.
استخدام العمليات المجمّعة
تقرأ النصوص البرمجية عادةً البيانات من جدول بيانات، وتجري عمليات حسابية، وتكتب النتائج مرة أخرى. تستخدم برمجة تطبيقات ميزات تحسين مدمجة، مثل البحث المسبق والتخزين المؤقت للكتابة.
يمكنك زيادة التخزين المؤقت المضمّن إلى أقصى حدّ من خلال تقليل عمليات القراءة والكتابة. تكون عملية التبديل بين أوامر القراءة والكتابة بطيئة. لتسريع تنفيذ البرنامج النصي، اقرأ جميع البيانات في مصفوفة باستخدام أمر واحد، ونفِّذ العمليات على بيانات المصفوفة، واكتب البيانات باستخدام أمر واحد.
تجنَّب التبديل بين عمليات القراءة والكتابة كما هو موضّح في هذا المثال غير الفعّال:
// 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();
}
النص البرمجي غير فعّال لأنّه يتضمّن تكرارًا لـ 10,000 خلية مع عمليات كتابة متتالية. على الرغم من أنّ ذاكرة التخزين المؤقت للكتابة تساعد في ذلك، إلا أنّ تجميع الطلبات أكثر فعالية:
// 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 ثانية، بينما يستغرق تشغيل الرمز الفعّال ثانية واحدة فقط.
تجنُّب المكتبات في النصوص البرمجية التي تتضمّن واجهة مستخدم كثيفة
تُعد المكتبات مفيدة لإعادة استخدام الرموز، ولكنها تزيد من مدة بدء تشغيل النصوص البرمجية. ويكون هذا التأخير ملحوظًا في واجهات المستخدم لخدمة HTML من جهة العميل التي تجري عمليات google.script.run متكررة وقصيرة المدة. استخدِم المكتبات باعتدال في الإضافات وتجنَّبها في النصوص البرمجية التي تجري العديد من طلبات google.script.run.
استخدام خدمة ذاكرة التخزين المؤقت
استخدِم خدمة ذاكرة التخزين المؤقت لتخزين الموارد مؤقتًا بين عمليات تنفيذ النصوص البرمجية. يقلّل التخزين المؤقت من معدّل جلب البيانات. يوضّح المثال التالي كيفية استخدام خدمة "ذاكرة التخزين المؤقت" لتسريع الوصول إلى خلاصة RSS بطيئة.
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 ثانية، ولكن ستكون عمليات الوصول اللاحقة سريعة إلى أن تنتهي صلاحية العنصر.