目的によっては CSR( Client side rendering ) のが良い(当たり前ですが)

・全てのページで 1 まとめにすると重くなるけど流石にそれは分けますよ。階層構造のサイトであれば問題は起きにくいです。
・デフォルトではページ毎に URL を割り当てることができなくて、自前でそれをやる必要があるのは確かですが、それを行う必要がない場合も多いです。それをやることになったとしても大して難しくない。逆に画面によっては URL を割り当てたくない画面すらありますので入り口となる画面にしか URL がないってことがメリットにもなります。制御できることがメリットじゃないですか。
CSR はキャッシュできないとか、あるといえばあります。でもキャッシュする必要がないサイトであれば関係ないです。
・画面間のデータ共有が CSR だとめちゃくちゃ楽です。他の方法だと問題が色々とあってさ。サーバーに投げて hidden 等々でオウム返しするのは面倒だし。サーバーのセッションメモリだって面倒臭い。セッションメモリならサーバーだから絶対安全とか勘違いしている人もいる。queryString だって今では長さに制限はないかもだけど昔は制限があったんですよ。それに queryString は Referer に出てしまってセキュリティ的に良くないってのもある。今のブラウザは Referer のセキュリティも考えてくれたりもしますけど。後は覗き見にも弱いアドレスバーの queryString が見えちゃうからね。クッキーは容量が少ないし使いづらいし。sessionStorage も容量制限がある。sessionStorage はかなり有望ですけど、まだちょっと不安材料があります。サブウインドウにデータ置くとかデザイン的にないですし。少し毛色が違うものに ASP.NET の ViewState がありますけど、これも理解を得られないですよ。でも CSR なら javascript の変数をそのまま次の画面に持ち越せるんですから、こんな楽なことはない。作り次第で DOM の内容だって保持して置けるし。
・sessionStorage はほとんどの場面で問題は起きないんですけど、ユーザーが理解できないのが問題っていうか。戻る/進むの際にデータが残り続けるんですよ。そうなるとユーザーが一人で使う端末であれば全く問題ないんですけど、他の誰かと共有する端末だと問題が起きるんですよ。当たり前のことなんですが、共有する端末ではプライベートモードでブラウザを動かして、終ったらログアウトしてブラウザを閉じるべきなんですけど、世の中にはそんなに詳しくない利用者が沢山いて、ログアウトせずにブラウザを閉じずに他のサイトに行ったりして離席してしまう人もいるわけですよ。つまりそういった詳しくない利用者向けのサイトでは躊躇した方がいいってことです。それと個人情報とか機密情報とか扱うサイトは危険です。そうじゃないサイトであれば安心ですけど。後は共有端末の管理がしっかりしていない可能性があるとだめです。管理ができていればプライベートモードでしか起動しないだろうし、F12 なんかも無効にするだろうし、離席したら自動的にブラウザを閉じたりして問題は起きないでしょうから。そうは言ってもサーバーのセッションメモリに情報が残っていれば、戻る/進むで情報は表示できるじゃないかって思うとは思いますが、サーバーのセッションにはタイムアウトがあるから。それと javascript のメモリや DOM だって back-forward cache で残ってるじゃないかってのもありますけど。昔は再 GET/POST で消えてたはずで。今でも設定次第では back-forward cache は使わないみたいですし。でも sessionStorage はそういったことなく無条件に残り続けるんですよ。そこがちょっとなあって思います。それにサジェスト入力とか、日本語変換の推測入力とか、ブラウザの入力内容保持系機能とか、sessionStorage 以外にも危険な機能は沢山あるじゃないか、共有端末なんだからしょうがないだろってのは確かにあるにはあるんですけどねえ。俺には今の sessionStorage ではセキュリティ的に不満が残るわけです。俺としては同一オリジンではないページに遷移した瞬間に sessionStorage の中身を削除するオプションが欲しいですよ、それと back-forward cache も無効にしたいです。入力補助系は微妙なラインですけど。今のブラウザの作りだとできないんですよ。pagehide とか beforeunload とか色々とイベントがあるんですけど、同一オリジンのページに遷移するかどうかすら知ることができないらしくて。これは直して欲しいですよね。その辺りが解決されたら sessionStorage を安心して使えるかなあって思います。その解決バージョンが出てから 5 年は待った方が良いと思ってますけど。いや同一オリジンってレベルの判定じゃ足りないか。cookie と同じ様にパスレベルの判定が欲しいな。それで同一オリジン同一パスから出た瞬間に自動的に消えると良い。
・ブラウザの戻る/進むを自前で制御しなくてはならないのは事実です。ですが本当にサポートする必要があるんですか?そんな必要がないのに CSR を採用しなかった人は馬鹿かもしれません。それにブラウザの戻る/進むってのは、CSR じゃなくてもサポートできないことが多いんですよ。たとえばサーバーのセッションのメモリに保持したとしても、それはいずれ消したりしますから。だから CSR だと自前で戻る/進むを実装することになるかもしれないけど、CSR じゃなかったからってまともに動くわけではないわけです。確かに CSR ではないだけでまともに動くようになるサイトってのはあると思うんですよ。だけど CSR ではないようにするだけでまともに動くタイプのサイトではないのに、戻る/進むを理由に CSR を採用しなかったのであれば馬鹿かもしれません。戻る/進むをサポートするのであれば、逆に俺は CSR にしなくてはならないと思ってるぐらいですよ。CSR じゃないと back-forward cache とかあって変な動きしますし、それに再 POST とかしますから。そんな動きで「ブラウザが自然に戻る/進む」をサポートしてくれるなんて馬鹿な発想だと思います。それでも戻る/進むをサポートする作りにするならまだしも、そういう作りにしないのに CSR はデフォルトで戻る/進むがサポートされないとか言ってたら、もう手の施しようが。
CSR はサーバーに優しいです。サーバーの負荷を減らします。なので貧弱なサーバーであるのに…CPU 的にもメモリ的にも、そして将来的にも増強する予定がないのに、CSR を採用しなかった人は馬鹿かもしれません。
SEO に弱いのは間違いない。だけど SEO とか関係ないサイトで、これを理由に CSR を採用しない人は大馬鹿かもしれません。
・ブラウザに負荷がかかるのは CPU 的にもメモリ的にも事実ですけど、大した負荷がかからないようにすれば良いだけの話です。大した負荷がかからないのにこれを理由に CSR を採用しなかった人は馬鹿かもしれません。
・ローディング(スピナー)表示が大変だって?馬鹿なこと言うな。そんなもの大したことない。CSR じゃなくても Ajax 通信ぐらいするだろう。これを理由に CSR を採用しなかった人は馬鹿かもしれません。大体 Google の検索結果をクリックしたら異様に重くてなかなか開かないのにスピナーが表示されないことの方が異常なんですよ。それで異様に重いからって他のリンクのクリックができてしまうじゃないですか。そのことのがおかしいはずで。なのでスピナー表示は CSR とか関係ないはずなんですよ。寧ろ CSR でスピナー表示をした方が綺麗に画面表示できます。そうじゃないとスピナーが途中まで表示されていたのに、途中から HTML 全体をロードしてスピナー表示が消えて画面描画が始まりますから。
・初期表示が遅いってのはありますが、逆に初期表示の速さにこだわらないじっくり腰を据えて使うサイトであれば CSR で良いわけです。じっくり使うサイトで CSR を採用しなかった人は馬鹿かもしれません。
CSR のが開発者は少ないとか、そんなの大した問題じゃないと思います。今時 CSR が分からない開発者とかいるかもですけど、かなりの人が知ってると思いますよ。俺も昔は知りませんでしたけど。でもなあ今時ですよ。20 年前なら CSR を知らない人は沢山いたでしょう。10 年前でも知らない人は多かったでしょう。でも 5 年前ってなると知ってる人はそこそこいるはずで。そして今では日本人の WEB 系プログラマの半数は知ってても良いんじゃないですか。それぐらいのイメージなんですけど俺は。俺は人集めとかやってないので詳しいことは知らないんですけど。つーか今時 WEB 系プログラマとかゴミみたいなもんですよ。できて当たり前ってレベルだと思います。市場が求めている人材はもっとずっと遥かに高度な人材って話ですし。CSR すらできないなんて話にならないよ。未経験なのはしょうがないかもですけど、やるなら CSR ぐらいできてもらわないと。
CSR にすると id の重複管理が面倒になるのは事実です。それは規約次第でどうにでもなるんですけど。それとフレームワークによっては問題は起きないですし。作り次第ではあります。でも世の中には変な人っているからなあ。平気で global 変数に "send" みたいな関数を作る人っているんですよね。あの感覚は俺には理解できない。俺だったら "https://ilovemisuzuchin.hatenablog.com/20220820/send" ぐらいの長い関数名にしますけど。これは雑な例えですが。でも最新の javascript って名前空間あるんでしたっけ。どうなんでしょうね。javascript は昔は const とかないし、容易に上書きができるからカスタマイズ性が高かったんですけど。逆に破壊的な書き換えもできたのは確かで。使いやすくなるのか微妙なところです。上書きは少しトリッキーかもしれませんけど、それでもカスタマイズできないよりマシなんじゃないかって思いはあります。上書きできなかったら中身のソースに手を入れるしかないですから。