AtCoder Problems を色々いじった

この記事は AtCoder関連サービス Advent Calendar 2018 - Adventar の一部です。毎年なぜか12月になるとウェブアプリを触りたくなる。

kimiyuki さんが DB に index を張ってくれた

なぜか今まで index を張っていなかったのが無事張られた。これによって、あるユーザーについての提出一覧を取得するのが高速化された。

github.com

ユーザー情報 API を作った

今まではユーザー情報を表示するために、「AC 数ランキング」「Rated Point ランキング」「使用言語のランキング」を取得していた。これらはそれぞれ、「ユーザーの AC 数が上から何番目か」「ユーザーの Point が上から何番目か」「ユーザーがある言語で解いた問題数が、その言語の中で何番目か」を表示するのに使われていた。これらを表示するためにわざわざランキングを取得しているのは、もともとあったランキング API を流用してユーザーページを作ったという歴史的経緯によるものである。実際には意外にユーザーページを見る人が多く、不必要なランキング取得によって表示が遅いなどの問題があった。今回は、ユーザーについて必要な情報だけ返す API を新しく作り、表示を高速化された。

https://github.com/kenkoooo/AtCoderProblems/pull/73github.com

ユーザー共通のファイルは静的ファイルに書き出すようにした

ユーザーごとの提出一覧は DB に問い合わせる必要があるが、それ以外の API は静的な JSON ファイルに書き出すようにした。もともと、これらの API は叩かれても 304 を返すようにしていたが、そのへんは nginx でやってくださいという気持ちになった。あとは API サーバーが落ちてても表面的には動いていてほしいというのもある。

https://github.com/kenkoooo/AtCoderProblems/pull/82github.com