1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GAS: 速度計測

Last updated at Posted at 2024-03-24

GASのスプレッドシートがどのくらいまで実用的かを知るため、スピードテストをしてみたら、結果が面白かったのでメモ。

値自体は、環境やタイミングによって全然変わってくると思うので参考程度です。

準備

シート

下のシートを用意しました。1万行、108列(CZ列まで)、約100万セル。
自分の環境では、このくらいのデータサイズになると、落ちたり、フリーズしたりと、ブラウザでの処理にはややストレスを感じます。
Googleスプレッドシートの上限は1000万セルだそうです(2024年3月現在)。

スクリーンショット 2024-03-24 13.21.14.png

コード

下のコードを実行しました。

test.gs
function myFunction() {

  console.time('Hello');
  console.log('Hello World');
  console.timeEnd('Hello');

  console.time('GetSheet');
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sh = ss.getActiveSheet();
  console.timeEnd('GetSheet');

  console.time('GetSheet2');
  const sh2 = SpreadsheetApp.getActiveSheet();
  console.timeEnd('GetSheet2');

  let str;

  console.time('GetSheetName');
  str = sh.getName();
  console.timeEnd('GetSheetName');

  console.time('GetCellValue');
  str = sh.getRange('A1').getValue();
  console.timeEnd('GetCellValue');

  let values;

  console.time('GetCellValues_10k');
  values = sh.getRange('A1:CZ100').getValues();
  console.timeEnd('GetCellValues_10k');

  console.time('GetCellValues_100k');
  values = sh.getRange('A1:CZ1000').getValues();
  console.timeEnd('GetCellValues_100k');

  console.time('GetCellValues_1m');
  values = sh.getRange('A1:CZ10000').getValues();
  console.timeEnd('GetCellValues_1m');
}

手順

3回テストしました。1回目・2回目はそのまま。3回目は[A1]セルの値だけ100に変更。
スクリーンショット 2024-03-24 13.36.17.png

結果

Label 1回目 2回目(無編集) 3回目(編集後)
Hello 3ms 3ms 4ms
GetSheet 11ms 10ms 8ms
GetSheet2 2ms 2ms 2ms
GetSheetName 287ms 314ms 307ms
GetCellValue 168ms 106ms 189ms
GetCellValues_10k 165ms 122ms 179ms
GetCellValues_100k 930ms 165ms 840ms
GetCellValues_1m 8522ms 571ms 9013ms

考察

セルの値の取得について

  • セルの値の取得には時間がかかる
  • 1セル取得するのも、1万セル取得するのも、たいして変わらない
  • 1万→10万になるとセル数に応じて時間がかかるようになる
  • 10万→100万はほぼセル数に比例する形で時間がかかる
  • 全く編集せずに同じセルの値を取得すると明らかに速い
  • 少しでも編集をするともとに戻る

それ以外

  • スプレッドシートを取得してからシートを取得するのと、シートを直接取得するのとで所要時間が異なる(GetSheetとGetSheet2の差)。ここは計測可能なレベルの差があるとは思っていなかった
  • シート名の取得は遅い。VBA同様、プロパティを扱う処理は遅いと思われるが、セルの値の取得に比べて極端に遅いのかどうかは追加検証が必要
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?