スキップしてメイン コンテンツに移動

投稿

8月, 2022の投稿を表示しています

API化したGASの高速化まとめ

API化したGASの高速化まとめ ひょんな事から、GAS経由でスプレッドシートの中身をAPI化する案件を頂き、ざっと構築したのは良いがあまりにも処理が遅すぎたので、高速化のためにやったあれやこれをまとめる。 全データ取得 まず、一番の高速化と言えば、データ取得。 for文で回してセルのデータを取るのではなく、 Sheets.Spreadsheets.Values.batchGet(sheetId, request).valueRanges みたいな感じで、ぐわっとデータを取るのが早い。 これは以前にやった事がある事だったので、基本中の基本なのだが、これだけだと高速化しなかった。 キャッシュ化 今回の案件は、複数のスプレッドシートからデータを取得して表示するという物であった。 故に、初回の実行時はどうしても何度かリクエストを飛ばす必要があった。 で、これが同じネットワーク(?)内だとある程度キャッシュが効くのだが、別のネットワークになると途端に起動が重くなるという クソ仕様 現象が生じた。 これを解決するために、色々調べた結果、 CacheService を使うと良い事が分かった。 const cache = CacheService.getUserCache(); みたいにして、後は let data = cache.get("keyName"); if( !data ){ //dataを色々処理 cache.put("keyName",JSON.stringify(data)); } と書いて対応する形にした。 今回は、APIを起動実行するユーザが一人しかいない前提なので、getUserCacheを採用したが、getDocumentCacheや、getScriptCacheとかでも全然構わない。 localStorageの採用 さらなる高速化として、localStorageを採用することにした。 これで、爆速化した。 一応、データ更新は3時間に1回という形にして、 let data = localStorage.getItem("keyName"); let dataObject; // キャッシュ時間は3時間くらい if( !data || data.expire