सबसे अच्छे तरीके

इस दस्तावेज़ में, स्क्रिप्ट की परफ़ॉर्मेंस को बेहतर बनाने के सबसे सही तरीकों के बारे में बताया गया है.

दूसरी सेवाओं पर किए जाने वाले कॉल की संख्या कम करें

दूसरी सेवाओं को कॉल करने के मुकाबले, अपनी स्क्रिप्ट में JavaScript ऑपरेशन का इस्तेमाल करना काफ़ी तेज़ होता है. जो कुछ भी आप Google Apps Script में पूरा कर सकते हैं वह ऐसी कॉल करने की तुलना में ज़्यादा तेज़ होगा, जिन् हें Google के सर्वर या किसी बाहरी सर्वर से डेटा फ़ेच करने की आवश् यकता होती है, जैसे कि Sheets, Docs, Sites, Translate, UrlFetch वगैरह से अनुरोध. अगर आप स्क्रिप्ट से उन सेवाओं पर किए जाने वाले कॉल को कम करने के तरीके ढूंढ सकते हैं, तो आपकी स्क्रिप्ट तेज़ी से चलेंगी.

शेयर की गई ड्राइव का इस्तेमाल करके, दूसरों के साथ मिलकर काम करें

अगर आप दूसरे डेवलपर के साथ किसी स्क्रिप्ट प्रोजेक्ट पर काम कर रहे हैं, तो आप शेयर की गई ड्राइव की मदद से, Apps Script प्रोजेक्ट पर साथ मिलकर काम कर सकते हैं. शेयर की गई ड्राइव में मौजूद फ़ाइलों का मालिकाना हक किसी व्यक्ति के बजाय ग्रुप के पास होता है. इससे प्रोजेक्ट का डेवलपमेंट और रखरखाव आसान हो जाता है.

बैच ऑपरेशन का उपयोग करना

आम तौर पर, स्क्रिप्ट को स्प्रेडशीट से डेटा को पढ़ने, हिसाब लगाने, और डेटा के नतीजों को स्प्रेडशीट में लिखने की ज़रूरत होती है. Google Apps स्क्रिप्ट में पहले से कुछ बिल्ट-इन ऑप्टिमाइज़ेशन मौजूद है, जैसे कि स्क्रिप्ट से मिलने वाली संभावित चीज़ों को पाने के लिए आगे बढ़ने के लिए कैश मेमोरी का इस्तेमाल करना और सेट की जाने वाली चीज़ों को सेव करने के लिए कैश मेमोरी में डेटा सेव करना.

ऐप्लिकेशन में पहले से मौजूद कैश मेमोरी का ज़्यादा से ज़्यादा फ़ायदा पाने के लिए, स्क्रिप्ट लिखने और पढ़ने की संख्या को कम किया जा सकता है. पढ़ने और लिखने के निर्देशों का समय-समय पर इस्तेमाल करना धीमा होता है. स्क्रिप्ट को तेज़ी से चलाने के लिए, एक निर्देश की मदद से अरे में सारा डेटा पढ़ें, अरे में मौजूद डेटा पर कोई भी कार्रवाई करें, और डेटा को एक निर्देश से लिखें.

यहां एक उदाहरण दिया गया है — आपको इसका पालन नहीं करना चाहिए या इसका इस्तेमाल नहीं करना चाहिए. कोई स्क्रिप्ट 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).setBackgroundColors(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 मिनट में आइटम को कैश मेमोरी में सेव होने की समयसीमा खत्म होने के बाद, बहुत तेज़ी से ऐक्सेस किया जाएगा.