권장사항

이 문서에는 성능 개선에 도움이 되는 권장사항이 나와 있습니다. 변경할 수 있습니다

다른 서비스로의 통화 최소화하기

스크립트 내에서 JavaScript 작업을 사용하는 것은 JavaScript를 사용하는 것보다 훨씬 빠릅니다. 다른 서비스에 전화할 수 있습니다. Google Apps Script 자체에서 실행할 수 있는 모든 작업은 Sheets, Docs, Sites, Translate, UrlFetch 요청과 같이 Google 서버 또는 외부 서버에서 데이터를 가져와야 하는 호출을 실행하는 것보다 훨씬 빠릅니다. 스크립트가 이러한 서비스에 호출하는 횟수를 최소화하는 방법을 찾을 수 있으면 스크립트가 더 빠르게 실행됩니다.

공유 드라이브로 공동작업 고려하기

다른 개발자와 함께 스크립트 프로젝트를 진행하는 경우 공유 드라이브를 사용하여 Apps Script 프로젝트 공동작업. 공유 드라이브의 파일은 개인이 아닌 그룹에서 소유하며, 이 프로젝트의 개발과 유지 관리가 더 쉬워집니다.

일괄 작업 사용

스크립트는 일반적으로 스프레드시트의 데이터를 읽고, 계산을 수행하고, 그런 다음 데이터의 결과를 스프레드시트에 씁니다. Google 앱 스크립트에 이미 미리보기 캐싱 사용과 같은 최적화 기능이 내장되어 있습니다. 스크립트를 가져올 가능성이 있는 항목을 검색하고, 캐싱을 작성하여 설정될 가능성이 높습니다.

다음과 같은 방법으로 스크립트를 작성하여 내장 캐싱을 최대한 활용할 수 있습니다. Cloud Storage를 사용하는 경우가 많습니다 읽기 및 쓰기 명령어 교체 속도가 느립니다 스크립트 속도를 높이려면 하나의 명령어로 모든 데이터를 배열로 읽어옵니다. 배열의 데이터에 대해 작업을 수행하고, 실행할 수 있습니다

다음은 예이며, 따르거나 사용해서는 안 됩니다. 스크립트 은 다음 코드를 사용하여 100x100 스프레드시트 그리드 이 함수는 이름이 지정된 함수로 사용할 색상을 결정하는 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 Script 다시 쓰기 캐시는 모든 줄의 끝에 플러시를 사용하여 다시 쓰기를 강제하기 때문입니다. 왜냐하면 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).setBackgrounds(colors);

비효율적인 코드를 실행하는 데 약 70초가 걸립니다. 효율적인 코드는 1초만 기다려 주세요!

UI가 많은 스크립트에서는 라이브러리 피하기

라이브러리는 코드를 재사용하는 편리한 방법입니다. 스크립트를 시작하는 데 걸리는 시간이 약간 늘어납니다. 지연 비교적 오래 실행되는 스크립트 (예: Google Drive 파일을 정리하는 것이 좋지만 클라이언트 측의 경우 HTML 서비스 사용자 인터페이스는 단기 google.script.run 지연은 모든 통화에 영향을 미칩니다. 이 문제로 인해 라이브러리는 부가기능에서 가급적 사용하지 않아야 하며 google.script.run를 많이 호출하는 부가기능이 아닌 스크립트에서는 사용하지 않는 것이 좋습니다.

캐시 서비스 사용

캐시 서비스를 사용하여 스크립트 실행 간에 리소스를 캐시할 수 있습니다. 데이터를 캐시하면 데이터를 가져와야 하는 횟수 또는 빈도 example.com에 20개의 평균 요청에 대한 액세스 속도를 높이려는 경우 아래 예에서는 Cache 서비스를 사용하여 이 데이터에 대한 액세스 속도를 높이는 방법을 보여줍니다.

  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분 후에 항목이 캐시에서 만료될 때까지 후속 액세스는 매우 빠릅니다.