ベスト プラクティス

このドキュメントでは、パフォーマンスの向上に役立つベスト プラクティスについて説明します。 使用できます。

他のサービスへの呼び出しを最小限に抑える

スクリプト内で JavaScript オペレーションを使用すると、 呼び出すことができます。Google Apps Script 内で実行できること データを取得する呼び出しよりもはるかに高速です。 Google のサーバーまたは外部サーバー(Google スプレッドシート、Google ドキュメント、 Google サイト、Translate、UrlFetch などです。可能であれば、スクリプトの実行を高速化します。 スクリプトがそれらのサービスに対して行う呼び出しを最小限に抑える方法を見つけることもできます。

共有ドライブでのコラボレーションを検討する

他のデベロッパーと共同でスクリプト プロジェクトに携わっている場合は、 共有ドライブを使用して Apps Script プロジェクトを共同編集する 共有ドライブ内のファイルのオーナーは、個人ではなくグループです。この プロジェクトの開発とメンテナンスが容易になります。

バッチ オペレーションを使用する

スクリプトでは通常、スプレッドシートからデータを読み取ったり、計算を行ったり、 データの結果をスプレッドシートに書き出します。Google アプリ スクリプトには、先読みキャッシュの使用など、最適化があらかじめ組み込まれています。 スクリプトが取得する可能性のあるものを取得し、キャッシュに書き込み、 設定される可能性が高くなります。

組み込みキャッシュを最大限に活用するようにスクリプトを記述することで、 読み書きの回数を最小限に抑えることができます。読み取り / 書き込みコマンドを交互に繰り返す 処理に時間がかかりますスクリプトを高速化するには、1 つのコマンドですべてのデータを配列に読み込みます。 配列内のデータに対して任意のオペレーションを実行し、 できます。

以下に例を示しますが、これに従ったり、使用したりしてはいけない例です。スクリプト 次のコードを使用して、 100×100 のスプレッドシート グリッド。これは、Terraform という 使用する色を決定する 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).setBackgroundColors(colors);

非効率的なコードの実行には約 70 秒かかります。この効率的なコードは、 たった 1 秒!

UI を多用するスクリプトでライブラリを回避する

ライブラリは、コードの再利用に便利な手段で、 スクリプトの開始時間が少し長くなります。この遅延 比較的長時間実行されるスクリプト(ユーティリティ スクリプトなど)では、 クリーンアップできます)。ただし、クライアントサイドの HTML サービスのユーザー インターフェース。 短時間のgoogle.script.run 遅延はすべての通話に影響します。この問題のため、ライブラリでは、 アドオンでは控えめに使用するため、 google.script.run を頻繁に呼び出すアドオン以外のスクリプトでは、これらを避ける必要があります。

キャッシュ サービスを使用する

キャッシュ サービスを使用して、 スクリプトの実行と実行の間にリソースをキャッシュに保存します。データをキャッシュに保存することで、 データを取得する必要がある回数や頻度。 example.com にある RSS フィードに 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 分で終わります