Straightanswer.orgは問いに対する回答を素早く得られることを目的としたWebサイトです。サイトの目的のようなコンセプト部分以外のところでも、問いに対する回答を素早く得てもらうための工夫をしています。

そんな工夫の一部を紹介します。ここに書いてあること、当たり前だと思う人もたくさんいると思います。

そのページで最も大事な内容はSSR、その他は遅延処理

これはStraightanswer.org問いと回答のページのHTMLの取得をするリクエストが、開始から完了まで約29msであったことを示しています。

$ curl https://straightanswer.org/topics/Straightanswer.org%E3%81%AF%E3%81%A9%E3%82%93%E3%81%AAWeb%E3%82%B5%E3%82%A4%E3%83%88%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F --output /dev/null --silent --write-out @- << EOF
time_namelookup: %{time_namelookup}\n
time_connect: %{time_connect}\n
time_appconnect: %{time_appconnect}\n
time_pretransfer: %{time_pretransfer}\n
time_starttransfer: %{time_starttransfer}\n
time_total: %{time_total}\n
EOF
time_namelookup: 0.001541
time_connect: 0.001654
time_appconnect: 0.012277
time_pretransfer: 0.012401
time_starttransfer: 0.028617
time_total: 0.029294

HTML取得のリクエストを素早く完了することだけを良しとしてしまうと、ほぼ空のHTMLを返し、JavaScriptであらゆる情報を非同期に取得することが正解になってしまいます。

それはStraightanswer.orgには合いません。この29msで返されたHTMLはCSSやユーザがページを訪れた目的である情報をすべて含んでいます。

「ユーザがページを訪れた目的である情報」とは、ここでは問いと回答の内容です。このページに含まれているが、「ユーザがページを訪れた目的である情報」ではない情報とは、ここでは例えば「関連する問い」です。関連する問いを目的にこのページを訪れるユーザはかなり少ないはずです。この部分の情報はブラウザでJavaScriptを動かし、サーバから取得、レンダリングしています。

この部分はまだまだ改善の余地があると考えています。これはこのブログの記事を取得が約13msで完了したことを示しています。Straightanswer.orgの約29msの半分以下です。

curl https://blog.varwww.com/posts/2022/notify-via-discord-webhook.html --output /dev/null --silent --write-out @- << EOF
time_namelookup: %{time_namelookup}\n
time_connect: %{time_connect}\n
time_appconnect: %{time_appconnect}\n
time_pretransfer: %{time_pretransfer}\n
time_starttransfer: %{time_starttransfer}\n
time_total: %{time_total}\n
EOF
time_namelookup: 0.001672
time_connect: 0.001837
time_appconnect: 0.011878
time_pretransfer: 0.011995
time_starttransfer: 0.013159
time_total: 0.013233

このブログは各記事のHTMLを事前に生成しており、リクエストを受けたときにデータベースにアクセスが発生しません。Straightanswer.orgでもこのようなSSGやISRができれば、もっと早くユーザの求める情報を届けられます。

これができれば、time_pretransferとtime_starttransferの間の約16msを0に近づけられます。

time_pretransfer: 0.012401
time_starttransfer: 0.028617

ユーザがページを訪れた目的の情報をページの上部に表示

ページのメインコンテンツの前に広告や、別ページの案内が入っているサイトもちらほら見つかります。広告がそこにある目的は言うまでもないでしょう。メインコンテンツの前にそのサイト内の別のページの案内があるのは、そのWebサイトの中を回遊してほしいという意図があるのでしょう。しかしユーザが今求めるいる情報ではありません。

Straightanswer.orgは、他のページも見てほしいというエゴを持ち込まないようにしています。

メールもできれば本文に頼らず、件名だけで情報を伝えきる

メールの件名だけで今ユーザが必要とする情報を伝えきることができれば、ユーザはメールを開く必要がありません。メールの一覧までで必要な情報をすべて受け取れます。

これは適用できるメールがそれほど多くはありませんが、できるところでは件名にそのメールで伝えたい内容を入れるようにしています。

Straightanswer.orgはアカウント作成時に6桁の数字をメールし、その値を画面に入力してもらっています。6桁の数字を伝えるだけであれば、件名だけで十分です。以下はStraightanswer.orgが実際に送信するメールの件名です。

Straightanswer.orgの認証コードは[237163]

メールの本文は件名とほぼ同じ内容です。