fx ट्रिगर और ऑटोमेशन
ENहिन्दी

कोटा, समय सीमा और उनके उपाय

⏱ 12 मिनट

आप क्या सीखेंगे

  • रोज़मर्रा के scripts में सबसे ज़्यादा मायने रखने वाली limits
  • बड़े jobs को टुकड़ों में चलाना ताकि 6 मिनट की limit पार न हो
  • caching, locking और email quota जाँचना

समझिए

वो limits जो असल में आड़े आती हैं

Google पूरी list अपने Quotas for Google Services page पर देता है, और numbers समय-समय पर बदलते हैं — मौजूदा values हमेशा वहीं जाँचें। ये सबसे ज़रूरी हैं:

Limit Personal Gmail account Google Workspace account
एक execution का run time ~6 मिनट ~6 मिनट
Custom function का run time ~30 सेकंड ~30 सेकंड
रोज़ के email recipients ~100 ~1,500
रोज़ का कुल trigger run time ~90 मिनट ~6 घंटे
हर script में प्रति user triggers 20 20

ज़्यादातर beginners को email और 6 मिनट वाली limits ही परेशान करती हैं।

भेजने से पहले email quota देखें

function sendIfQuota(recipients) {
  const left = MailApp.getRemainingDailyQuota();
  if (left < recipients.length) {
    console.warn(`Only ${left} emails left today; need ${recipients.length}.`);
    return false;
  }
  // ... send ...
  return true;
}

6 मिनट की limit का उपाय: टुकड़ों में काम

अपनी जगह save करें, समय ख़त्म होने से पहले रुकें, और अगले run में वहीं से आगे बढ़ें।

const MAX_MS = 5 * 60 * 1000; // stop after 5 minutes, leaving a safety margin

function processInChunks() {
  const start = Date.now();
  const props = PropertiesService.getScriptProperties();
  let nextRow = Number(props.getProperty('NEXT_ROW') || 2);

  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Customers');
  const lastRow = sheet.getLastRow();

  while (nextRow <= lastRow) {
    if (Date.now() - start > MAX_MS) break;

    const batchSize = Math.min(50, lastRow - nextRow + 1);
    const rows = sheet.getRange(nextRow, 1, batchSize, 3).getValues();
    rows.forEach(r => {
      // ... slow work per row, e.g. an API call ...
    });

    nextRow += batchSize;
    props.setProperty('NEXT_ROW', String(nextRow)); // save progress after each batch
  }

  if (nextRow > lastRow) {
    props.setProperty('NEXT_ROW', String(nextRow)); // retain completion cursor
    console.log('All rows done');
  } else {
    console.log(`Paused at row ${nextRow}; will continue on next run`);
  }
}

इसे हर 10–15 मिनट चलने वाले ट्रिगर से जोड़ें। काम पूरा होने पर अगली पंक्ति का स्थान सुरक्षित रहता है; बाद के रन सिर्फ़ नई पंक्तियाँ पढ़ते हैं। पूरा काम दोबारा शुरू करने के लिए ही NEXT_ROW हटाएँ।

धीमे lookups को cache करें

अगर कई runs एक ही data लाते हैं (जैसे API से आज का gold rate), तो उसे cache करें:

function getRate() {
  const cache = CacheService.getScriptCache();
  const cached = cache.get('GOLD_RATE');
  if (cached) return Number(cached);

  const rate = fetchRateFromApi();             // slow call (your own function)
  cache.put('GOLD_RATE', String(rate), 3600);  // keep for 1 hour (max 6 hours)
  return rate;
}

दो runs का टकराव रोकें

अगर trigger और user एक ही function एक साथ चला सकते हैं (जैसे दोनों invoice numbers जोड़ रहे हों), तो lock लगाएँ:

function nextInvoiceNumber() {
  const lock = LockService.getScriptLock();
  lock.waitLock(10000); // wait up to 10 s
  try {
    const props = PropertiesService.getScriptProperties();
    const n = Number(props.getProperty('LAST_INVOICE') || 0) + 1;
    props.setProperty('LAST_INVOICE', String(n));
    return n;
  } finally {
    lock.releaseLock();
  }
}

रफ़्तार के और tips

  • Batch read/write (Module 2) से "बहुत धीमा" वाली ज़्यादातर समस्याएँ हल हो जाती हैं।
  • loops के अंदर SpreadsheetApp.flush() न लगाएँ।
  • एक ही file बार-बार न खोलें — एक बार खोलें और आगे pass करें।

मुख्य बातें

  • हर run के लिए ~6 मिनट और रोज़ की email limits ध्यान में रखें; मौजूदा numbers Google के quota page पर देखें।
  • बड़े jobs: progress Script Properties में save करें और अगले trigger पर आगे बढ़ें।
  • बार-बार के lookups के लिए CacheService, shared counters के लिए LockService।

अभ्यास

अभ्यासअभ्यास 1

processInChunks को ऐसे बदलिए कि सारी rows पूरी होने पर यह अपना time-driven trigger भी delete कर दे।

प्रश्नोत्तरी

एक execution लगभग कितनी देर चल सकता है? a) 30 सेकंड b) लगभग 6 मिनट c) 1 घंटा
लगभग 6 मिनट
कौन-सी service दो runs को एक ही invoice number बनाने से रोकती है? a) CacheService b) LockService c) MailApp
LockService
कोटा, समय सीमा और उनके उपाय · हिंदी | ExcelWalaa