この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 31580|答える: 0

[出典] ASP.NET MVC5はプリコンパイルモードでリリースされ、ページの読み込み速度とパフォーマンスが向上しています

[リンクをコピー]
2020年8月22日 10:05:17に投稿 | | | |
プロジェクトにページ数が多すぎると、IISが起動し、初めて開くときにウェブサイトが非常に遅くなります。これは、リリース時に事前コンパイルされていないため、ユーザーがウェブページを訪れたときに動的にコンパイルされるためです。 既存サイトのパフォーマンスを向上させ、エラーチェックを行いたい場合は、プロジェクト公開時に「リリース時にプリコンパイル」を選択する必要があります。

紹介

小規模プロジェクトの場合、デフォルト設定での公開は通常の動作を達成できます。最初のページは56秒で開かれ(サーバー設定によります)、他のページの最初の開封は基本的に12秒で完了します。最初の瞬間開きではありません。

プロジェクトの機能が複雑になりファイル数が増えると、出版後の最初のページを開くのに30秒以上かかり、他のページの最初の開く時間は約10秒で、最初の瞬間開きにはかかりません。

これは、リリース時にプロジェクトが事前コンパイルされておらず、ユーザーがウェブページにアクセスすると動的にコンパイルされるため、アプリケーションプールがリサイクルされたりプロジェクトファイルが変更されたりすると再コンパイルされ、再び「初回」という遅い状態が繰り返されるため、耐え難い状況です。

プリコンパイルの利点

  • パフォーマンス。 コンパイルされたコードは、ECMAScriptやVBScriptのようなスクリプト言語よりもはるかに高速で実行されます。なぜなら、それは機械語に近い表現であり、追加の解析を必要としないからです。
  • 警備。 コンパイル済みコードは、高水準言語が持つ可読性や抽象性を欠いているため、未コンパイルのソースコードよりもリバースエンジニアリングが難しいです。 さらに、ファジングツールはコンパイルされたコードのリバースエンジニアリングに抵抗する能力を高めます。
  • 安定。 コンパイル時に構文の誤りや型の安全性の問題、その他の問題がないかコードを確認してください。 ビルド時にこれらのエラーを検出することで、コード内の多くのエラーを排除できます。
  • 相互運用性。 MSILコードは任意の.NET言語をサポートしているため、元々他の言語で書かれたアセンブリをコード内で使用することが可能です。 例えば、C#でウェブページ ASP.NET 書いている場合、Visual Basicで書かれた.dllファイルへの参照を追加できます。


ASP.NET コアはプリコンパイル済みです

事前コンパイル済み

ASP .Net Coreのデフォルトはプリコンパイルです。 公開時点では、システム内のすべてのRazorビューはデフォルトで事前コンパイルされています。 コンパイルされたビューDLLは一様にxxx.PrecompiledViews.dllまたはxxx.Views.dllと呼ばれます

ダイナミックコンパイル

プロジェクト全体を動的コンパイルに設定するのは簡単です。設定プロジェクトMvcRazorCompileOnPublishをfalseの値で追加するだけです



ASP.NET ウェブサイトの事前コンパイル

私たちはVisual Studioを使ってウェブサイトを以下の方法で公開します:




「この事前コンパイル済みサイトの更新を許可する」オプションの意味 .Net Webプロジェクトを公開するとき、一般的にすべての 。 CSファイルは自動的にDLL動的リンクライブラリを生成します。これはウェブサイトのソースコードを非常によく保護できます。なぜなら、サーバー側のコードは通常に配置されているからです。 CSファイルのDLLファイルはすべて生成されてサーバーにアップロードされるため、他の人が簡単に開くことはできません!

しかし、ashx、aspxなどの他のファイルは、その中にあるものがそのままであり、他の人はこれらのファイルを開いて閲覧できますが、CSコードは見えなくても、ASPXファイルのHTMLコードやサーバーコントロール、関連属性は見ることができます。 ashxのようなファイルはCSファイルに相当し、その中のコードは簡単に確認できます。

そこで。 CSファイルは安全ですが、ASPX、ashxなどのファイルは安全ではありません。 では、サーバーにアップロードしたウェブファイルを安全にする方法はありますか? 公開時に「この事前コンパイルされたサイトの更新を許可する」をチェックしない方法があります。

この事前コンパイルされたサイトの更新を許可する

ウェブ公開時に「この事前コンパイル済みサイトの更新を許可する」にチェックを入れると、結果はこうなります:すべてのCSファイルをDLLファイルにコンパイルしたものや他のファイル、そして元のファイルには変更がなく、中身や内容は変更がなく、他の人がメモ帳で開けば、中のコードやHTMLコードなどは一目で見られます。

さらに、ユーザーが初めて特定のページを訪れた際にはバグを見つけるためにコンパイルし、エラーがなければ通常通りアクセスできるため、速度は比較的遅くなります。 その後の訪問は普通です。

「この事前コンパイル済みサイトの更新を許可する」のチェックを外します

ウェブ公開時に「この事前コンパイル済みサイトを更新する」をチェックしない場合、結果は次のようになります:1. ウェブサイト内のすべてのCSファイルはDLLファイルにコンパイルされます; 2. csファイルに加えて、ASPX、ASHXなどの他のファイルも一緒にコンパイルされ、各ファイルはBINディレクトリに対応する*.compiledファイルを生成します。

その後、ノートパッドでASPX、ASHXなどのファイルを閲覧してもコードは見当たりません。HTMLコードのマークアップも見えません。そのようなファイルを開くと、テキストは1行だけで、「これは事前コンパイルされたツールによって生成されたマークアップファイルです。削除すべきではありません!」と書かれており、ファイルサイズは1kbです。

ウェブサイトのページを開こうとすると、プロジェクト開始後の最初のページ(1~2秒かかりますがEFは使いません)を除き、他のページの最初のページは瞬時に開きます(EFの最初の遅さはこの記事の範囲を超えています)。 これでプリコンパイル版を見るのが遅くなった気がします!

ここでこっそりお伝えしますが、ビューディレクトリを削除しても通常のウェブページの開局には影響しません~なぜ削除させないのですか?私たちは頼む勇気も、削除もできません。

目標は達成されましたが、binディレクトリの混乱など、いくつかの後遺症を解決しなければなりませんでした。

「統合しない」を選択してください。 「各ページとコントロールごとに別々のアセンブリを作成してください」と言い、その結果、ビンにもっと多くのファイルApp_Web_*.dllファイルが入ります。



リリース時には、プロジェクトのrootがPrecompiledApp.configファイルを生成します。 内容は以下の通りです:



PrecompiledApp.configファイルは、アプリケーションの展開状況やリクエスト時にファイルをコンパイルする必要があるかどうか ASP.NET 追跡するために使われます。




先の:C# 8.0の新機能と知識ポイントの説明
次に:EF DbContextはコンテキストが一意であることを保証します
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com