コンセプト
Turboは必ずサーバ通信をします。サーバ通信をして、返ってきたHTMLを使用して画面を更新します。そしてサーバ通信は早くて100ms以下、遅い場合は数秒の単位で時間がかかります。
これがTurboのアキレス腱です。ネットワーク環境が悪いとUI/UXを大きく低下させる恐れがあります。例えばイベント会場はWiFiや携帯ネットワークがつながりにくかったり、遅延したりしやすいので、そのような環境で使うアプリの場合は十分に気を使う必要が出てきます。
レスポンスが遅い場合、何らかのフィードバックをユーザに与える必要があります。ヤコブ・ニールセンの10ユーザビリティヒューリスティックスの一番目は「システム状態の視認性」です。これを怠るとUI/UXを悪化させる恐れがあります。
Turboを多く使う方がコードは簡単になりやすいです。可能ならばなるべくサーバ側で作業した方がほぼ必ずコードがシンプルなります。
しかしUI/UXが悪くなってしまったら本末転倒です。
そこでControllerにsleepを入れたり、ネットワーク通信を3Gにシミュレートすることをお勧めします。そうしてまずはネットワークレスポンスが遅い状態を確認します。対策が必要かどうかを検討し、必要ならば下記の方針を検討します。(不要なケースもあります。そこはケースバイケースで判断します)
data-turbo-preload
も検討できます<form>
や<turbo-frames>
にaria-busy
属性を自動的につけてくれますので、これを使えばCSSだけでローダーアニメーションが表示できる可能性があります<form>
や<html>
タグにaria-busy
属性が自動的につきます。また画面の最上部に横に走るローダーが自動的に表示されます<form>
送信の時はdata-turbo-submits-with
属性を使って待ちUIを実現することもできます