見出し画像

GASでスプレッドシートを取得するときの実行速度

スプレッドシートを取得する類の記載で迷ったとき、ほんの少しでも実行速度の早いものから利用したいので検証してみる。

計測方法

計測は、500回処理を叩くを5回繰り返してその平均値を見た。
ちなみに以下の何も叩かないものだと平均 0.4 msで実行した瞬間に終わる。

function myFunction() {
  for (let i = 1; i <= 5; i++) {
    console.time(`計測${i}回目`);
    for (let j = 1; j <= 500; j++);
    console.timeEnd(`計測${i}回目`);
  }
}

計測結果

  • getActiveSpreadsheet() ▶︎ 365.8 ms 👑

  • getActive() ▶︎ 992.2 ms

  • openById('**********') ▶︎ 553.2 ms

  • openByUrl('**********') ▶︎ 795.6 ms

実行内容とコメント

アクティブなスプレッドシートを取得する

サンプルコードでよく見かけるgetActiveSpreadsheet()。
取得したいスプレッドシートがアクティブかどうかって判断むずくね、と思ってあんまり使ったことはない。
結果:平均 365.8 ms

function myFunction() {
  for (let i = 1; i <= 5; i++) {
    console.time(`計測${i}回目`);
    for (let j = 1; j <= 500; j++) {
      SpreadsheetApp.getActiveSpreadsheet();
    }
    console.timeEnd(`計測${i}回目`);
  }
}

アクティブなスプレッドシートを取得する(おまけ)

リファレンスを読むとgetActive()もスプレッドシートを返すと書いているので一応試してみた。こっちはかなり遅い。
特に違いもないらしいのでメリットは短く書けるというくらいかも。
結果:平均 992.2 ms

function myFunction() {
  for (let i = 1; i <= 5; i++) {
    console.time(`計測${i}回目`);
    for (let j = 1; j <= 500; j++) {
      SpreadsheetApp.getActive();
    }
    console.timeEnd(`計測${i}回目`);
  }
}

ID指定でスプレッドシートを取得する

URLより短く済むしなと思っていつも使うのはこれ。
結果:平均 553.2 ms

function myFunction() {
  for (let i = 1; i <= 10; i++) {
    console.time(`計測${i}回目`);
    for (let j = 0; j < 100; j++){
      SpreadsheetApp.openById('**********');
    }
    console.timeEnd(`計測${i}回目`);
  }
}

URL指定でスプレッドシートを取得する

関数名的にURLとIDが同じくらいなのかなと予想してたけど、条件を変えて試してもURL指定の方が少し遅かった。
結果:平均 795.6 ms

function myFunction() {
  for (let i = 1; i <= 10; i++) {
    console.time(`計測${i}回目`);
    for (let j = 0; j < 100; j++){
      SpreadsheetApp.openByUrl('**********');
    }
    console.timeEnd(`計測${i}回目`);
  }
}

アクティブは状況によって対象のスプレッドシートが変わっちゃうので、私の場合は基本的にopenById()で良さそう。

この記事が気に入ったらサポートをしてみませんか?