スプレッドシートの読み書きがあまりに遅かったので、改善できないか調査し無事高速化することができたので、原因と改善策を共有します。
原因
API のリクエスト数が原因でした、私の場合はループ中に以下の API を使って大量のセルを読み書きしていたので、それが原因で低速化していました。当然の結果と言えば当然ですが、ここまでボトルネックになるとは思いませんでした。
- getRange
- getValue
- setValue
改善策
結論から書くと、以下の API を使って指定の範囲をまとめて読み書きすることで、リクエスト回数を減らし処理の高速化を図ることができました。実際にどのくらい高速化を図ることができるのか検証していきます。
- getValues
- setValues
機能確認
getValues で取得できる配列を確認します、試しに画像の範囲を取得します。
検証
検証には範囲 20 × 20 にある全ての数字を + 1 するスクリプトを使って行います。
最初に従来の方法で検証します。
before.gs
結果: 124967ms (125秒)
遅い・・・遅すぎる (泣) 次に「getValues」「setValues」を使った方法で検証します。
after.gs
結果: 368ms (0.4秒)
速い!!!想定の何十倍も速いです。処理が単純だったので、ここまでの改善は極端なのかもしれませんが、リクエスト周りを最適化するだけで大幅な改善が期待できるようです。
コメント
コメントを投稿