इस दस्तावेज़ में, सबसे सही तरीके बताए गए हैं. इनकी मदद से, अपनी स्क्रिप्ट की परफ़ॉर्मेंस को बेहतर बनाया जा सकता है.
दूसरी सेवाओं पर किए जाने वाले कॉल की संख्या कम करें
दूसरी सेवाओं को कॉल करने के मुकाबले, अपनी स्क्रिप्ट में JavaScript ऑपरेशन का इस्तेमाल करना काफ़ी तेज़ होता है. Google Apps Script में जो भी काम किया जा सकता है वह Google के सर्वर या किसी बाहरी सर्वर से डेटा फ़ेच करने वाले कॉल करने के मुकाबले काफ़ी तेज़ी से होगा. जैसे, Sheets, Docs, साइटें, 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 कॉल आते हैं.
हालांकि, कॉल को एक साथ करने से कोड को ज़्यादा असरदार बनाया जा सकता है. यहां एक फिर से लिखा गया फ़ंक्शन दिया गया है. इसमें सेल रेंज को कलर नाम के ऐरे में पढ़ा जाता है. ऐरे में मौजूद डेटा पर कलर असाइनमेंट ऑपरेशन किया जाता है. साथ ही, ऐरे में मौजूद वैल्यू को स्प्रेडशीट में लिखा जाता है:
// 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 फ़ाइलों को साफ़ करने वाली यूटिलिटी स्क्रिप्ट) के लिए नहीं दिखती. हालांकि, क्लाइंट-साइड एचटीएमएल सेवा के यूज़र इंटरफ़ेस के लिए, जो बार-बार और कम समय तक चलने वाले google.script.run
कॉल करते हैं, इस देरी का असर हर कॉल पर पड़ेगा. इस समस्या की वजह से, ऐड-ऑन में लाइब्रेरी का कम इस्तेमाल किया जाना चाहिए. साथ ही, उन नॉन-ऐड-ऑन स्क्रिप्ट में इनका इस्तेमाल करने से बचना चाहिए जो बहुत ज़्यादा google.script.run
कॉल करती हैं.
कैश सेवा का इस्तेमाल करना
स्क्रिप्ट के एक बार चलने के बाद, फिर से चलने से पहले संसाधनों को कैश मेमोरी में सेव करने के लिए, कैश मेमोरी सेवा का इस्तेमाल किया जा सकता है. डेटा को कैश मेमोरी में सेव करके, डेटा को फ़ेच करने की संख्या या फ़्रीक्वेंसी को कम किया जा सकता है. मान लें कि आपके पास 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 मिनट में आइटम को कैश मेमोरी में उपलब्ध होने तक, बहुत तेज़ी से ऐक्सेस किया जाएगा.