その理由は安定性です。
サーバー側では、安定したコンポーネントを選択できます。通常、これは、JavaとFreeMarkerなどの非常に慎重に選択された多数のライブラリを選択することを意味します。言うまでもなく、Javaの標準ライブラリ以外のすべてのライブラリは使い捨てとして扱われるため、私は自作のラッパーを介して外部ライブラリにアクセスします。つまり、必要に応じて、あるライブラリから別のライブラリに簡単に変更できます。
Javaを新しいバージョンに更新するときは常に、Javaはメジャーバージョンの更新でも非常に安定したコンポーネントであるため、通常はうまく機能します。また、私が持っているすべてのサーバーは同じJavaバージョンを実行しています。すべてのクライアントが同じJavaScript実装を実行しているわけではありません。
クライアント側では、安定したコンポーネントを選択できません。ブラウザのメーカーは、私が特に好きではないが、使用を余儀なくされている言語であるJavaScriptを選択するように強制します。(そして、JavaScriptにコンパイルされた言語について教えてはいけません、それらは恐ろしいです!)すべてのブラウザーのJavaScript実装は異なります。これは、サポートされているすべてのブラウザーバージョンで製品をテストすることは完全に困難であることを意味します。
私の解決策は?サーバー側でできる限り多くの処理を実行します。クライアント側は、サーバーにデータを送信し、JSONおよびHTMLフラグメントの形式でサーバーからデータを受信する軽量のラッパーです。XMLを避けます。代わりにJSONを使用してください。
クライアント側のテンプレート作成は行いません。サーバー上のコンテンツをHTMLフラグメントにレンダリングしてから、.innerHTML
属性を使用してクライアント側のさまざまなプレースホルダー要素に割り当てます。これにより、2つのテンプレートエンジン(JavaエンジンとJavaScriptエンジン)が必要ないため、テクノロジースタックが可能な限りシンプルになります。
欠点は明らかに光速の遅延です。大陸間で0.5秒の待ち時間は珍しくありません。
最近のクライアントはスマートフォンかもしれないと考えてください。スマートフォンのバッテリー寿命は限られているため、大量の計算を行う場合は、サーバーにオフロードすることをお勧めします。ただし、無線アクセスを回避できるため、クライアント側で簡単なことを行うとエネルギー効率が向上します。しかし、主な議論である安定性は、単純な計算であってもサーバーにオフロードすることが実際に理にかなっていることを意味する場合があります。
補遺として、いくつかの回答ですでに見たように、セキュリティも向上します。アプリケーションロジックがすべてクライアント側にある場合、誰かが、たとえば、オンラインWebショップから購入するものに価格を設定できます。