試験一覧の表示速度を改善 — パフォーマンス最適化の裏側
一括採点では、トップ画面に試験の一覧が表示されます。 しかし試験の数が増えるにつれて、この一覧の表示に時間がかかるようになっていました。 本記事では、試験一覧ページの読み込み速度を改善した取り組みについて紹介します。
何が起きていたか
一括採点を起動すると、最初に表示されるのが試験一覧ページです。 ここには、これまでに作成した試験が一覧で並びます。
試験の数が少ないうちは問題なく表示されていました。 しかし、1学期、2学期と使い続けて試験が数十件、数百件と増えていくと、 一覧の表示に数秒かかるようになっていました。 起動するたびに待たされるのは、日々の採点作業にとって大きなストレスです。
原因の特定 — 必要以上のデータを取得していた
調査したところ、原因はデータベースからのデータの取得方法にありました。 データベースとは、一括採点が試験や採点の情報を保存している場所のことです。
わかりやすくたとえると、図書館で本を探す場面を想像してください。 目当ての本のタイトルと著者名を知りたいだけなのに、 図書館の本を全冊カウンターまで運んできて、1冊ずつ表紙を確認していたようなものです。 当然、本の数が増えれば増えるほど時間がかかります。
技術的な補足:試験一覧に表示するのは「試験名」「日付」「受験者数」などの基本情報だけです。 しかし従来の実装では、各試験に紐づく採点データや答案画像の情報まで、 すべてまとめて取得していました。
図書館のたとえに戻ると、本棚から全冊を持ってくるのではなく、 目録(カタログ)だけを見れば十分だったのです。 一覧画面で必要なのはあくまで「概要」であり、 試験の中身の詳細データは一覧には不要でした。
解決方法 — 必要なデータだけを取得する
解決方法はシンプルです。 一覧画面で本当に必要なデータだけをデータベースから取得するように変更しました。
従来(全データを取得)
試験名、日付、受験者数、採点データ、答案画像、設定情報...
改善後(必要なデータだけ取得)
試験名、日付、受験者数
図書館のたとえでいえば、全冊を持ってくるのをやめて、 目録カードだけを見るようにした、ということです。 目録カードには本のタイトルや著者名が書かれていますから、 それだけで一覧は作れます。 本の中身が必要になったときに、初めてその1冊を取りに行けばよいのです。
具体的に何を変えたか
- 一覧表示に不要な関連データ(採点結果、答案画像のパスなど)を取得対象から除外
- 試験の基本情報(試験名、実施日、受験者数、タグ)だけを取得するように変更
- 試験の詳細画面を開いたときに、初めて詳細データを読み込む方式に変更
これは「必要なときに、必要なものだけを取り出す」という考え方です。 書類棚から必要な書類だけを引き出すのと同じ要領で、 データベースへの問い合わせを効率化しました。
改善の効果
この変更により、試験一覧ページの表示速度が大幅に改善されました。 試験の数が多い環境でも、一覧がすばやく表示されるようになっています。
取得するデータ量が大きく減ったことで、 試験が数百件あっても表示の待ち時間がほとんど気にならない水準になりました。 特に、長くお使いいただいてデータが蓄積された環境ほど、効果を実感していただけるはずです。
先生にとってのメリット
この改善で、先生方にとって最も変わるのは「体感の速さ」です。 一括採点を起動して試験一覧が表示されるまでの時間が短くなり、 すぐに作業を始められるようになります。
忙しい採点期間中に、ソフトの起動を待つ時間はできるだけ短くしたいものです。 試験の数がどれだけ増えても、サクサク動く一覧画面をお使いいただけます。
今回の改善は、一括採点をアップデートするだけで自動的に適用されます。 先生側での設定変更は一切不要です。
まとめ
試験一覧の表示が遅くなっていた原因は、 一覧に不要なデータまでまとめて取得していたことでした。 図書館の目録だけを見ればよいところを、全冊持ってきていたようなものです。
必要なデータだけを取得するように改善したことで、 試験がたくさん登録されていてもすばやく一覧が表示されるようになりました。 一括採点は、先生が快適に使えるよう、今後もこうした改善を続けていきます。
関連記事
- なぜSQLiteを選んだのか - データベースの仕組み
- PDF出力の高速化 - 別のパフォーマンス改善