eventosは毎月イベントの体験・価値向上に向けた様々な機能を追加している反面、まだまだ未熟なぴよぴよコードも残っています。
今回はそんなぴよぴよコードを立派な親鳥に成長させた一例として、eventosチケット機能における「管理コンソール画面でのチケット一覧表示」速度改善を行なった具体例をご紹介します。
今回の目次
- 経緯
- 原因調査
- 配列二重ループへの対策
- 改善結果
1.経緯
eventosの管理コンソール画面でチケットの登録件数が増加すると、一覧表示が重くなり画面が開けなくなるケースが発生。
2.原因調査
チケットの登録数が多くなるにつれて表示に時間が掛かる設計ではあるものの、数百のデータで表示までに30 – 40分のような時間が掛かる状態は想定外。ボトルネックがどこかを調査。
⇨Chromeの検証メニューの「Network」でフロント側(js)かサーバ側(API)かを検証し、APIの処理が圧倒的に重いことが判明したため、APIの処理の見直しを実施した。
該当箇所を処理シーケンス図に書き起こしたところ、二重ループが発生している箇所を検出
処理シーケンス図をみると、ユーザー情報が配列に格納されて、チケット情報のループの中で更にループ処理を実施していた。特にユーザー数が大きくなった場合、単純に線形時間掛かってしまっている処理だった。
例)10000個の配列の9999番目のデータのidを検索する場合、9999回ループを回して検索できる
3.配列二重ループへの対策
修正方針として、ユーザ情報を配列ではなく連想配列に格納するように変更。key:ユーザID / value: ユーザ情報
4.改善結果
3の修正の結果、以下の通り速度が改善した。
■チケット一覧表示時:28秒 → 2.2秒
■チケット登録時 :7秒 → 1.2秒
こういった問題は、改めてピックアップするとぴよぴよコードとわかりますが、毎日コーディングをしている中ではうっかり書いてしまいがち。
シンプルではありますが、サービスとして、ループ処理で対応する件数が多くなることが想定できる場合は、1回あたりの処理がどれくらいで完了するのかを必ず意識した設計・実装を行うようにしましょう。
投稿者プロフィール
最新の投稿
- bravesoft2021年12月1日これから社内ISUCONの開催を検討している人に向けて|b-ISUCON開催までの道のり
- BtoB 自社事業(SaaS事業)2021年9月17日eventosのチケット一覧表示速度を改善した話
- bravesoft2021年4月24日自社サービス開発のマネージメントに大事な5つのこと