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

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

अन्य सेवाओं पर कॉल करने की संख्या कम करना

अपनी स्क्रिप्ट में 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 मिनट में कैश मेमोरी से नहीं हट जाता.