इस दस्तावेज़ में, सबसे सही तरीके बताए गए हैं. इनकी मदद से, स्क्रिप्ट की परफ़ॉर्मेंस को बेहतर बनाया जा सकता है.
अन्य सेवाओं को कम से कम कॉल करना
अपनी स्क्रिप्ट में JavaScript ऑपरेशंस का इस्तेमाल करना, अन्य सेवाओं को कॉल करने की तुलना में काफ़ी तेज़ होता है. Google Apps Script में किए जाने वाले काम, Google के सर्वर या किसी बाहरी सर्वर से डेटा फ़ेच करने के लिए किए जाने वाले कॉल की तुलना में ज़्यादा तेज़ी से पूरे होते हैं. जैसे, Sheets, Docs, Sites, Translate, UrlFetch वगैरह के अनुरोध. अगर स्क्रिप्ट उन सेवाओं को कम कॉल करती हैं, तो आपकी स्क्रिप्ट तेज़ी से चलेंगी.
शेयर की गई ड्राइव का इस्तेमाल करके, साथ मिलकर काम करने के बारे में सोचें
अगर आपको किसी स्क्रिप्ट प्रोजेक्ट पर अन्य डेवलपर के साथ मिलकर काम करना है, तो शेयर की गई डिस्क में मौजूद Apps Script प्रोजेक्ट पर मिलकर काम किया जा सकता है. शेयर की गई ड्राइव में मौजूद फ़ाइलों का मालिकाना हक, किसी व्यक्ति के बजाय ग्रुप के पास होता है. इससे प्रोजेक्ट को डेवलप करना और उसका रखरखाव करना आसान हो जाता है.
एक साथ कई कार्रवाइयां करना
आम तौर पर, स्क्रिप्ट को स्प्रेडशीट से डेटा पढ़ने, कैलकुलेशन करने, और फिर डेटा के नतीजों को स्प्रेडशीट में लिखने की ज़रूरत होती है. Google Apps Script में पहले से ही कुछ ऑप्टिमाइज़ेशन की सुविधा मौजूद है. जैसे, स्क्रिप्ट को मिलने वाली जानकारी को पहले से ही सेव करने के लिए, लुक-अहेड कैशिंग का इस्तेमाल करना. साथ ही, स्क्रिप्ट में सेट की जाने वाली जानकारी को सेव करने के लिए, राइट कैशिंग का इस्तेमाल करना.
स्क्रिप्ट लिखकर, बिल्ट-इन कैश मेमोरी का ज़्यादा से ज़्यादा फ़ायदा लिया जा सकता है. इसके लिए, पढ़ने और लिखने की संख्या को कम करें. पढ़ने और लिखने के लिए बारी-बारी से इस्तेमाल की जाने वाली कमांड, धीमी होती हैं. स्क्रिप्ट को तेज़ी से चलाने के लिए, एक ही कमांड से सभी डेटा को ऐरे में पढ़ें. इसके बाद, ऐरे में मौजूद डेटा पर कोई भी कार्रवाई करें. आखिर में, एक ही कमांड से डेटा को लिखें.
यहां एक उदाहरण दिया गया है. आपको इसका इस्तेमाल नहीं करना चाहिए. स्क्रिप्ट, 100 x 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 की राइट-बैक कैश मेमोरी से मदद मिलती है, क्योंकि यह हर लाइन के आखिर में फ़्लश का इस्तेमाल करके राइट-बैक को लागू करती है. कैशिंग की वजह से, स्प्रेडशीट में सिर्फ़ 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
के कई कॉल करती हैं.
कैश सेवा का इस्तेमाल करना
स्क्रिप्ट को बार-बार चलाने के दौरान संसाधनों को कैश मेमोरी में सेव करने के लिए, Cache Service का इस्तेमाल किया जा सकता है. डेटा को कैश मेमोरी में सेव करके, डेटा को फ़ेच करने की संख्या या फ़्रीक्वेंसी को कम किया जा सकता है. मान लें कि आपके पास 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 मिनट तक रहता है.