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

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

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

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

همکاری با درایوهای مشترک را در نظر بگیرید

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

از عملیات دسته ای استفاده کنید

اسکریپت ها معمولاً نیاز به خواندن داده ها از یک صفحه گسترده، انجام محاسبات و سپس نوشتن نتایج داده ها در یک صفحه گسترده دارند. Google Apps Script قبلاً دارای برخی بهینه‌سازی‌های داخلی است، مانند استفاده از حافظه پنهان برای بازیابی آنچه که یک اسکریپت احتمالاً دریافت می‌کند و نوشتن ذخیره‌سازی برای ذخیره مواردی که احتمالاً تنظیم می‌شود.

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

در اینجا یک مثال است - مثالی که نباید از آن پیروی کنید یا استفاده کنید. یک اسکریپت از کد زیر برای تنظیم رنگ‌های پس‌زمینه هر سلول در یک شبکه صفحه‌گسترده 100×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 ستون حلقه می زند و به طور متوالی در 10000 سلول می نویسد. حافظه پنهان بازنویسی اسکریپت Google Apps کمک می کند، زیرا با استفاده از flush در انتهای هر خط، بازنویسی را وادار می کند. به دلیل حافظه پنهان، تنها 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 ثانیه طول می کشد تا اجرا شود. کد کارآمد فقط در 1 ثانیه اجرا می شود!

از کتابخانه های موجود در اسکریپت های سنگین UI اجتناب کنید

کتابخانه ها روشی مناسب برای استفاده مجدد از کد هستند، اما زمان شروع اسکریپت را اندکی افزایش می دهند. این تاخیر برای اسکریپت های نسبتا طولانی مدت (مانند اسکریپت ابزاری برای پاک کردن فایل های Google Drive) قابل توجه نیست، اما برای رابط های کاربری سرویس HTML سمت سرویس گیرنده که تماس های مکرر و کوتاه مدت google.script.run را انجام می دهند، تأخیر بر هر تماس تأثیر می گذارد. به دلیل این مشکل، کتابخانه‌ها باید به مقدار کم در افزونه‌ها استفاده شوند، و ممکن است بخواهید از آنها در اسکریپت‌های غیرافزونه‌ای که تماس‌های زیادی با google.script.run برقرار می‌کنند، اجتناب کنید.

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

می توانید از سرویس کش برای ذخیره منابع بین اجرای اسکریپت استفاده کنید. با کش کردن داده ها، می توانید تعداد دفعات یا دفعات واکشی داده ها را کاهش دهید. سناریویی را در نظر بگیرید که در آن یک فید RSS در 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 دقیقه از حافظه پنهان منقضی شود.