私のチームと私は、エンタープライズレベルのWebアプリケーションの開発を開始するための資金を受け取りました(それが何をするのかについての詳細は説明しません)。アプリケーションには多数の個別のWebページがありますが、そのうち2つのページはより集中的で非常に重いものです。
私はプロジェクトのチーフアーキテクトに任命されているので、私は最新のウェブフレームワークについていくつかの研究をしています。バックエンドでは、いくつかテストを行い、Azure SQLプラットフォームを使用することにしました。これまでのところ、私はCore 2.0を使ったASP.NETに対してなされた、そしてなされている改善を望んでいます。特にRazorエンジン、以前のバージョンのASP.NET MVCの上に。
「新しい」かみそり対Angular/Reactなどについての専門家の意見を得たいと思いました。私はパフォーマンスを特に重視しています。 Core 2.0 Razorはどのようにクライアントサイドのレンダリングフレームワークに耐えられますか?違いは無視できますか?私たちのアプリは潜在的な1,000,000人のユーザーをターゲットにしています(およそ10万人の同時)。
前もって感謝します!
Azure SQLを使用して、AngularフロントエンドとASP.NET Core APIバックエンドを作成しました。私たちはCore Razorをテストしました、そして、レガシーのRazorよりはましですが、Angularは結局私達にとってずっと速いです。ユーザーエクスペリエンスに関する限り、Angular(またはReact)はパフォーマンスの点ではるかに優れています。 Angularのモデルバインディングの側面は、サーバーサイドレンダリングの大きな利点です。ただし、Razor(または一般的にはサーバーサイドレンダリング)を使用すると、データに関する限り、全体的な整合性が向上し、フロントエンドからバックエンドへのデータの移行が向上します。フロントエンドフレームワークとAPIの間には真の意味での断絶があります。サーバーに渡されるデータはすべて型付きオブジェクトにキャストする必要があります。つまり、2つの別々のPOCOモデルセットを管理する必要があります。サーバーオブジェクトとフロントエンドオブジェクトが揃っていない場合、これが問題を引き起こす可能性があります。現時点では、Entity Framework Coreはそれほど成熟していないため、オブジェクトの更新、子オブジェクトを含むオブジェクトのクエリなどに問題があります。
全体的に見て、この設定はこれまでのところうまくいきました。私はReactがより快適であればAngularと同じような置き換えになると思います。私はAngularを学ぶ必要がありましたが、これは非常に簡単な移行でした。
サーバー側でapiを使用してAngular/Reactを使用する方法
しかしAngular/Reactを使用することで、クライアントについて心配する必要があります。
ベンチマークはありません。しかし、私はJQuery、Razor、.NET MVC(C#)、AJAXを実行するいくつかのプロジェクトを持っています。あなたが取り組んでいる規模ではありません。
アドバイス..物事をよく考え、ベストプラクティスに従うようにしてください。物事を保守しやすくするために、必ずコントローラ、ビュー、モデルを小さく意味のあるグループに分割してください。私が始めたとき、私はすべてを1つのHomeコントローラに入れ、そして共有フォルダに大量のビューを入れることを間違えました。最初は問題ありませんでしたが、機能のクリープが始まると混乱し、元に戻って再設計するのが難しくなりました。
私はLinq2SQLも使っています。私はすべてのものについてモデルを作成するのを間違えて、それから私は私の質問からモデルとして結果セットを返すことができるだけであることに気づいた。当たり前。
あなたが.NET MVCに行き、パフォーマンスを心配するなら、これらは私が遭遇したものです:
大きなHTMLブロックを作成する部分ビューを返さないでください。すべてを最小限に抑えるようにしてください。すべての空白を取り除きます。小さいID名を使用してください。できるだけ軽いHTMLを作成するために時間をかけてください。 JSONを返して、クライアントにいくつかの作業を行わせます。
CSSの開発方法には注意してください。大量のインラインスタイルを使用しないでください。後で最小化できるCSSファイルに組み込んでください。
クライアントサイドのJSについても同様です。 JSを部分的なビューの中に入れたくなります。物事を整理してください。
IEでレンダリングするのは大変です。特にたくさんの画像がある場合は。もちろん画質を損なうことなく、できるだけ画像を圧縮するようにしてください。