Google Apps Script - スプレッドシートの読み書きを高速化する

スプレッドシートの読み書きがあまりに遅かったので、改善できないか調査し無事高速化することができたので、原因と改善策を共有します。

原因

API のリクエスト数が原因でした、私の場合はループ中に以下の API を使って大量のセルを読み書きしていたので、それが原因で低速化していました。当然の結果と言えば当然ですが、ここまでボトルネックになるとは思いませんでした。

  • getRange
  • getValue
  • setValue

改善策

結論から書くと、以下の API を使って指定の範囲をまとめて読み書きすることで、リクエスト回数を減らし処理の高速化を図ることができました。実際にどのくらい高速化を図ることができるのか検証していきます。

  • getValues
  • setValues

機能確認

getValues で取得できる配列を確認します、試しに画像の範囲を取得します。

検証

検証には範囲 20 × 20 にある全ての数字を + 1 するスクリプトを使って行います。

最初に従来の方法で検証します。

before.gs

結果: 124967ms (125秒)

遅い・・・遅すぎる (泣) 次に「getValues」「setValues」を使った方法で検証します。

after.gs

結果: 368ms (0.4秒)

速い!!!想定の何十倍も速いです。処理が単純だったので、ここまでの改善は極端なのかもしれませんが、リクエスト周りを最適化するだけで大幅な改善が期待できるようです。

コメント