بهترین شیوه ها

این سند بهترین شیوه‌ها را برای بهبود عملکرد اسکریپت فهرست می‌کند.

تماس با سایر سرویس‌ها را به حداقل برسانید

استفاده از عملیات جاوا اسکریپت در اسکریپت شما سریع‌تر از فراخوانی سایر سرویس‌ها است. هر کاری که در خود Google Apps Script انجام می‌دهید، سریع‌تر از واکشی داده‌ها از سرورهای گوگل یا یک سرور خارجی است، مانند درخواست‌ها به Sheets، Docs، Sites، Sites، Translate و UrlFetch. اگر فراخوانی‌های سرویس را به حداقل برسانید، اسکریپت‌های شما سریع‌تر اجرا می‌شوند.

همکاری با درایوهای مشترک

اگر روی یک پروژه اسکریپت با سایر توسعه‌دهندگان کار می‌کنید، از درایوهای مشترک استفاده کنید . فایل‌های موجود در درایو مشترک متعلق به گروه هستند نه افراد، که توسعه و نگهداری پروژه را آسان‌تر می‌کند.

استفاده از عملیات دسته‌ای

اسکریپت‌ها معمولاً داده‌ها را از یک صفحه گسترده می‌خوانند، محاسبات را انجام می‌دهند و نتایج را دوباره می‌نویسند. Apps Script از بهینه‌سازی‌های داخلی مانند look-ahead و write caching استفاده می‌کند.

با به حداقل رساندن خواندن و نوشتن، حافظه پنهان داخلی را به حداکثر برسانید. دستورات خواندن و نوشتن متناوب کند هستند. برای سرعت بخشیدن به یک اسکریپت، تمام داده‌ها را با یک دستور در یک آرایه بخوانید، عملیات را روی داده‌های آرایه انجام دهید و داده‌ها را با یک دستور بنویسید.

از خواندن و نوشتن متناوب همانطور که در این مثال ناکارآمد نشان داده شده است، خودداری کنید:

// 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();
}

این اسکریپت ناکارآمد است زیرا با نوشتن‌های متوالی، در ۱۰۰۰۰ سلول حلقه می‌زند. در حالی که حافظه پنهان نوشتن کمک می‌کند، فراخوانی‌های دسته‌ای بسیار کارآمدتر است:

// 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);

کد ناکارآمد حدود ۷۰ ثانیه طول می‌کشد تا اجرا شود، در حالی که کد کارآمد فقط در ۱ ثانیه اجرا می‌شود.

از کتابخانه‌ها در اسکریپت‌های سنگین رابط کاربری اجتناب کنید

کتابخانه‌ها برای استفاده مجدد از کد مناسب هستند اما زمان راه‌اندازی اسکریپت را افزایش می‌دهند. این تأخیر در رابط‌های کاربری سرویس HTML سمت کلاینت که فراخوانی‌های مکرر و کوتاه‌مدت google.script.run را انجام می‌دهند، قابل توجه است. از کتابخانه‌ها در افزونه‌ها به میزان کم استفاده کنید و از آنها در اسکریپت‌هایی که فراخوانی‌های google.script.run زیادی انجام می‌دهند، اجتناب کنید.

استفاده از سرویس کش

از سرویس Cache برای ذخیره منابع بین اجرای اسکریپت‌ها استفاده کنید. ذخیره سازی، فرکانس واکشی داده‌ها را کاهش می‌دهد. مثال زیر نحوه استفاده از سرویس Cache را برای افزایش سرعت دسترسی به یک فید RSS کند نشان می‌دهد.

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 ثانیه صبر می‌کنید، دسترسی‌های بعدی تا زمان انقضای آیتم سریع هستند.

مجموعه داده‌های بزرگ و محاسبات پیچیده

گوگل شیت ابزاری قدرتمند است، اما با افزایش مجموعه داده‌ها و پیچیده‌تر شدن محاسبات، ممکن است با مشکلات عملکردی مانند تأخیر در صفحه گسترده، خطاهای IMPORTRANGE و وقفه‌های زمانی اسکریپت مواجه شوید.

چه زمانی از پایگاه داده استفاده کنیم

اگر تعداد سلول‌های صفحه گسترده شما به مرز ۱۰ میلیون سلول نزدیک می‌شود یا اگر فرم‌های متصل زیادی (مثلاً ۱۰ یا بیشتر) و فرمول‌های پیچیده در صفحات متقاطع دارید، استفاده از یک راهکار پایگاه داده اختصاصی را در نظر بگیرید.

  • Google Cloud SQL : یک سرویس پایگاه داده رابطه‌ای کاملاً مدیریت‌شده برای MySQL، PostgreSQL و SQL Server. از سرویس JDBC برای اتصال به Cloud SQL یا سایر پایگاه‌های داده خارجی مانند Oracle یا MongoDB (از طریق پل‌های مناسب) استفاده کنید.
  • BigQuery : یک انبار داده بدون سرور و بسیار مقیاس‌پذیر. می‌توانید از Connected Sheets برای تجزیه و تحلیل مجموعه داده‌های بزرگ BigQuery به طور مستقیم در Sheets استفاده کنید، یا از سرویس BigQuery برای تعامل با داده‌های Apps Script استفاده کنید.

بهینه‌سازی عملکرد فرمول

استفاده زیاد از فرمول‌های خاص می‌تواند سرعت صفحه گسترده شما را کاهش دهد:

  • ARRAYFORMULA : اگرچه محاسبات ARRAYFORMULA در مقیاس بزرگ مفید است، اما می‌تواند پرهزینه باشد.
  • VLOOKUP و OFFSET : این توابع می‌توانند در مجموعه داده‌های بزرگ کند باشند. برای انجام جستجوهای کارآمدتر در حافظه، استفاده از INDEX و MATCH یا Apps Script را در نظر بگیرید.
  • IMPORTRANGE : استفاده مکرر از IMPORTRANGE در چندین شیت می‌تواند منجر به "خطاهای داخلی" شود، اگر شیت‌های منبع بزرگ باشند یا تحت بار سنگین باشند. تجمیع داده‌ها در یک منبع متمرکز می‌تواند کمک کند.

مدیریت زمان انقضای اسکریپت

اسکریپت برنامه‌ها محدودیت زمانی اجرا دارد (معمولاً ۶ دقیقه برای هر اجرا، یا ۳۰ دقیقه برای برخی از حساب‌های Google Workspace). اگر اسکریپت شما به دلیل عبور از محدودیت اجرا، مرتباً از کار می‌افتد:

  1. استفاده از عملیات دسته‌ای : همانطور که در بخش استفاده از عملیات دسته‌ای ذکر شد، فراخوانی صفحات گسترده و سایر سرویس‌ها را به حداقل برسانید.
  2. تقسیم وظایف : وظایف بزرگ را به بخش‌های کوچک‌تری تقسیم کنید که هر کدام را بتوانید در مدت زمان تعیین‌شده انجام دهید.
  3. استفاده از تریگرها برای ادامه : یک تریگر قابل نصب مبتنی بر زمان برای از سرگیری یک فرآیند طولانی مدت تنظیم کنید. اسکریپت شما می‌تواند وضعیت فعلی خود (مثلاً آخرین اندیس ردیف پردازش شده) را با استفاده از سرویس Properties ذخیره کند و در اجرای بعدی از آن نقطه ادامه دهد.