שיטות מומלצות

במסמך הזה מפורטות שיטות מומלצות לשיפור הביצועים של סקריפטים.

צמצום השימוש בשירותים אחרים

שימוש בפעולות JavaScript בסקריפט מהיר יותר מאשר קריאה לשירותים אחרים. כל פעולה שמבצעים ב-Google Apps Script עצמו מהירה יותר משליפת נתונים משרתי Google או משרת חיצוני, כמו בקשות ל-Sheets, ל-Docs, ל-Sites, ל-Translate ול-UrlFetch. הסקריפטים יפעלו מהר יותר אם תצמצמו את מספר הקריאות לשירותים.

שיתוף פעולה עם תיקיות אחסון שיתופי

אם אתם עובדים על פרויקט של סקריפט עם מפתחים אחרים, כדאי לשתף את הפרויקט באמצעות כוננים משותפים. הקבצים באחסון השיתופי שייכים לקבוצה ולא למשתמשים ספציפיים, ולכן קל יותר לפתח ולתחזק פרויקטים.

שימוש בפעולות בקבוצות

בדרך כלל, סקריפטים קוראים נתונים מגיליון אלקטרוני, מבצעים חישובים וכותבים את התוצאות בחזרה. ב-Apps Script נעשה שימוש באופטימיזציה מובנית כמו חיפוש מראש וזיכרון מטמון לכתיבה.

כדי למקסם את השימוש במטמון המובנה, צריך לצמצם את פעולות הקריאה והכתיבה. החלפה בין פקודות קריאה וכתיבה איטית. כדי להריץ סקריפט מהר יותר, קוראים את כל הנתונים למערך באמצעות פקודה אחת, מבצעים פעולות על נתוני המערך וכותבים את הנתונים באמצעות פקודה אחת.

מומלץ להימנע מקריאה וכתיבה לסירוגין, כמו בדוגמה הלא יעילה הזו:

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

הסקריפט לא יעיל כי הוא מבצע לולאה על 10,000 תאים עם כתיבות רצופות. למרות שמטמון הכתיבה החוזרת עוזר, קיבוץ של קריאות הוא יעיל הרבה יותר:

// 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 שניות, ואילו הקוד היעיל פועל במשך שנייה אחת בלבד.

הימנעות מספריות בסקריפטים עם ממשק משתמש עשיר

ספריות נוחות לשימוש חוזר בקוד, אבל הן מאריכות את זמן ההפעלה של הסקריפט. העיכוב הזה מורגש בממשקי משתמש של HTML Service בצד הלקוח שמבצעים קריאות חוזרות וקצרות ל-google.script.run. כדאי להשתמש בספריות במשורה בתוספים ולהימנע מהן בסקריפטים שמבצעים הרבה קריאות ל-google.script.run.

שימוש בשירות המטמון

אפשר להשתמש בשירות המטמון כדי לשמור במטמון משאבים בין הרצות של סקריפטים. שמירה במטמון מפחיתה את התדירות של שליפת הנתונים. בדוגמה הבאה אפשר לראות איך משתמשים בשירות ה-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 שניות, אבל גישות חוזרות יהיו מהירות עד שהפריט יפוג.