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

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

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

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

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

अगर दूसरे डेवलपर के साथ किसी स्क्रिप्ट प्रोजेक्ट पर काम किया जा रहा है, तो शेयर की गई ड्राइव की मदद से 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 स्क्रिप्ट राइट-बैक कैश मेमोरी से मदद मिलती है, क्योंकि यह हर लाइन के आखिर में फ़्लश का इस्तेमाल करके राइट-बैक करती है. कैश मेमोरी में सेव किए जाने की वजह से, स्प्रेडशीट में सिर्फ़ 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 मिनट में कैश मेमोरी से खत्म नहीं हो जाता.