इस दस्तावेज़ में, स्क्रिप्ट की परफ़ॉर्मेंस को बेहतर बनाने के सबसे सही तरीके बताए गए हैं.
अन्य सेवाओं को कम से कम कॉल करना
अपनी स्क्रिप्ट में JavaScript ऑपरेशंस का इस्तेमाल करना, अन्य सेवाओं को कॉल करने से ज़्यादा तेज़ होता है. Google Apps Script में किए गए काम, Google के सर्वर या किसी बाहरी सर्वर से डेटा फ़ेच करने की तुलना में ज़्यादा तेज़ी से होते हैं. जैसे, Sheets, Docs, Sites, Translate, और UrlFetch से किए गए अनुरोध. अगर सर्विस कॉल कम किए जाते हैं, तो आपकी स्क्रिप्ट तेज़ी से चलेंगी.
शेयर की गई ड्राइव की मदद से साथ मिलकर काम करना
अगर आपको किसी स्क्रिप्ट प्रोजेक्ट पर अन्य डेवलपर के साथ मिलकर काम करना है, तो शेयर की गई ड्राइव का इस्तेमाल करके कोलैबरेट करें. शेयर की गई ड्राइव में मौजूद फ़ाइलों का मालिकाना हक, किसी व्यक्ति के बजाय ग्रुप के पास होता है. इससे प्रोजेक्ट को डेवलप करना और उसे बनाए रखना आसान हो जाता है.
बैच ऑपरेशन का इस्तेमाल करना
स्क्रिप्ट आम तौर पर स्प्रेडशीट से डेटा पढ़ती हैं, कैलकुलेशन करती हैं, और नतीजों को वापस लिखती हैं. Apps Script, पहले से मौजूद ऑप्टिमाइज़ेशन का इस्तेमाल करता है. जैसे, लुक-अहेड और राइट कैशिंग.
रीड और राइट की प्रोसेस को कम करके, पहले से मौजूद कैश मेमोरी का ज़्यादा से ज़्यादा इस्तेमाल करें. पढ़ने और लिखने के लिए बारी-बारी से दिए गए निर्देशों को पूरा करने में समय लगता है. स्क्रिप्ट को तेज़ी से चलाने के लिए, एक ही कमांड से सभी डेटा को एक कलेक्शन में पढ़ें. इसके बाद, कलेक्शन के डेटा पर कार्रवाइयां करें. आखिर में, एक ही कमांड से डेटा को लिखें.
इस उदाहरण में, पढ़ने और लिखने की प्रोसेस को बारी-बारी से किया गया है. इसलिए, यह तरीका सही नहीं है. इस तरह के तरीके से बचें:
// 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 सेकंड लगते हैं, जबकि कुशल कोड को चलने में सिर्फ़ 1 सेकंड लगता है.
यूज़र इंटरफ़ेस (यूआई) वाली स्क्रिप्ट में लाइब्रेरी का इस्तेमाल न करें
लाइब्रेरी, कोड को फिर से इस्तेमाल करने के लिए सुविधाजनक होती हैं. हालांकि, इससे स्क्रिप्ट के शुरू होने में लगने वाला समय बढ़ जाता है. यह देरी, क्लाइंट-साइड HTML सेवा के उन यूज़र इंटरफ़ेस में दिखती है जो बार-बार और कम समय के लिए google.script.run कॉल करते हैं. ऐड-ऑन में लाइब्रेरी का इस्तेमाल कम करें. साथ ही, ऐसी स्क्रिप्ट में इनका इस्तेमाल न करें जो कई google.script.run कॉल करती हैं.
कैश सेवा का इस्तेमाल करना
स्क्रिप्ट को कई बार चलाने के दौरान, संसाधनों को कैश मेमोरी में सेव करने के लिए कैश मेमोरी सेवा का इस्तेमाल करें. कैशिंग से, डेटा फ़ेच करने की फ़्रीक्वेंसी कम हो जाती है. यहां दिए गए उदाहरण में, आरएसएस फ़ीड को तेज़ी से ऐक्सेस करने के लिए, Cache सेवा का इस्तेमाल करने का तरीका बताया गया है.
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 सेकंड तक इंतज़ार करना होगा. इसके बाद, आइटम के खत्म होने तक, उसे तेज़ी से ऐक्सेस किया जा सकता है.
बड़े डेटासेट और मुश्किल कैलकुलेशन
Google Sheets एक बेहतरीन टूल है. हालांकि, डेटासेट बढ़ने और कैलकुलेशन ज़्यादा मुश्किल होने पर, आपको परफ़ॉर्मेंस से जुड़ी समस्याएं आ सकती हैं. जैसे, स्प्रेडशीट का धीमा हो जाना, IMPORTRANGE गड़बड़ियां, और स्क्रिप्ट का टाइम आउट हो जाना.
डेटाबेस का इस्तेमाल कब करना चाहिए
अगर आपकी स्प्रेडशीट में 1 करोड़ सेल की सीमा के करीब पहुंच गई है या आपके पास कई कनेक्ट किए गए फ़ॉर्म (जैसे, 10 या उससे ज़्यादा) और जटिल क्रॉस-शीट फ़ॉर्मूले हैं, तो किसी डेटाबेस समाधान का इस्तेमाल करें.
- Google Cloud SQL: यह MySQL, PostgreSQL, और SQL Server के लिए पूरी तरह से मैनेज की जाने वाली रिलेशनल डेटाबेस सेवा है. Cloud SQL या Oracle या MongoDB जैसे अन्य बाहरी डेटाबेस से कनेक्ट करने के लिए, JDBC सेवा का इस्तेमाल करें. इसके लिए, सही ब्रिज का इस्तेमाल करें.
- BigQuery: यह बिना सर्वर वाला ऐसा डेटा वेयरहाउस है जिसे काफ़ी हद तक बढ़ाया जा सकता है. कनेक्टेड शीट का इस्तेमाल करके, सीधे तौर पर Sheets में बड़े BigQuery डेटासेट का विश्लेषण किया जा सकता है. इसके अलावा, Apps Script से डेटा के साथ इंटरैक्ट करने के लिए, BigQuery सेवा का इस्तेमाल किया जा सकता है.
फ़ॉर्मूला की परफ़ॉर्मेंस को ऑप्टिमाइज़ करना
कुछ फ़ॉर्मूलों का ज़्यादा इस्तेमाल करने से, आपकी स्प्रेडशीट की परफ़ॉर्मेंस धीमी हो सकती है:
- ARRAYFORMULA: यह फ़ंक्शन काम का है, लेकिन बड़े पैमाने पर
ARRAYFORMULAकैलकुलेशन करने में ज़्यादा समय लग सकता है. - VLOOKUP और OFFSET: बड़े डेटासेट पर ये फ़ंक्शन धीरे-धीरे काम कर सकते हैं. मेमोरी में ज़्यादा असरदार तरीके से लुकअप करने के लिए,
INDEXऔरMATCHया Apps Script का इस्तेमाल करें. - IMPORTRANGE: कई शीट में
IMPORTRANGEका बार-बार इस्तेमाल करने से "आंतरिक गड़बड़ियां" हो सकती हैं. ऐसा तब होता है, जब सोर्स शीट बड़ी हों या उन पर ज़्यादा लोड हो. डेटा को एक ही जगह पर इकट्ठा करने से मदद मिल सकती है.
स्क्रिप्ट के टाइम आउट को मैनेज करना
Apps Script में, स्क्रिप्ट को चलाने के लिए समय सीमाएं तय की गई हैं. आम तौर पर, हर स्क्रिप्ट को चलाने के लिए छह मिनट का समय मिलता है. हालांकि, कुछ Google Workspace खातों के लिए यह समय 30 मिनट होता है. अगर आपकी स्क्रिप्ट बार-बार क्रैश हो रही है, क्योंकि वह स्क्रिप्ट को चलाने की तय सीमा से ज़्यादा समय ले रही है, तो:
- बैच ऑपरेशन का इस्तेमाल करें: बैच ऑपरेशन का इस्तेमाल करें सेक्शन में बताया गया है कि स्प्रेडशीट और अन्य सेवाओं के लिए कॉल कम से कम करें.
- टास्क को बांटना: बड़े टास्क को छोटे-छोटे हिस्सों में बांटें, ताकि हर हिस्से को तय समयसीमा में पूरा किया जा सके.
- जारी रखने के लिए ट्रिगर का इस्तेमाल करें: लंबी प्रोसेस को फिर से शुरू करने के लिए, इंस्टॉल किया जा सकने वाला टाइम-ड्रिवन ट्रिगर सेट अप करें. आपकी स्क्रिप्ट, Properties service का इस्तेमाल करके अपनी मौजूदा स्थिति (जैसे, प्रोसेस की गई आखिरी लाइन का इंडेक्स) को सेव कर सकती है. इसके बाद, अगली बार स्क्रिप्ट को उसी स्थिति से शुरू किया जा सकता है.