最近、JavaScript および CSS ファイルを共通ライブラリ DLL に埋め込み、展開とバージョン管理をより簡単にする作業を開始しました。Web アプリケーションで同じことをしたい理由があるのか 、それとも Web アプリケーションの通常のファイルのままにし、共有コンポーネントには埋め込みリソースのみを使用するのが常に最善なのか疑問に思っていました。
それらを埋め込む利点はありますか?
最近、JavaScript および CSS ファイルを共通ライブラリ DLL に埋め込み、展開とバージョン管理をより簡単にする作業を開始しました。Web アプリケーションで同じことをしたい理由があるのか 、それとも Web アプリケーションの通常のファイルのままにし、共有コンポーネントには埋め込みリソースのみを使用するのが常に最善なのか疑問に思っていました。
それらを埋め込む利点はありますか?
私はこれと同じ決定を一度しなければなりませんでした。JavaScript/CSS リソースを DLL に埋め込むことを選択した理由は、アプリケーションがデプロイされた後に (Web アプリケーションを購入した好奇心旺盛なエンド ユーザーによる) これらのファイルの改ざんを防ぐためです。
私は、ブラウザーが JavaScript ファイルをダウンロードする方法に関する Easement のコメントの妥当性を疑い、疑問に思っています。ブラウザがそれらをダウンロードして使用できるようにするために、ページがブラウザに送信される前に、埋め込まれた JavaScript/CSS ファイルが ASP.NET によって一時的に再作成されると確信しています。私はこれに興味があり、独自のテストを実行するつもりです。その様子をお伝えします……。
-フリニー
もちろん、自分が何をしているのかを知っている人なら、アセンブリ Reflector を使用して JS または CSS を抽出できます。しかし、それは単に FireBug のようなものを使用してこの情報を取得するよりもはるかに多くの作業になります。通常のエンド ユーザーは、リソースをいじるためだけにこのような問題をすべて処理したいとは思わないでしょう。この種のことに関心がある人は、エンド ユーザーではなく、悪意のあるユーザーである可能性があります。ユーザーが DLL でアセンブリ リフレクターのようなツールを使用できる場合、その時点でサーバーは既に危険にさらされているため、おそらくセキュリティに関して他にも多くの問題が発生しています。セキュリティは、リソースを埋め込むという私の決定の要因ではありませんでした。
要点は、ユーザーがこれらのリソースを必要としないと考えて削除したり、改ざんしたりするなど、愚かなことをしないようにすることでした。
また、関連するファイルが少ないため、展開目的でアプリケーションをパッケージ化するのがはるかに簡単になります。
ページで使用される DLL (クラス ライブラリ) が大きいのは事実ですが、これによってページが大きくなることはありません。ASP.NET は、クライアント (ブラウザー) に送信する必要があるコンテンツを生成します。ページが機能するために必要なもの以外に、クライアントに送信されるコンテンツはありません。これらのページの提供を支援するクラス ライブラリが、クライアントとサーバー間で送信されるデータのサイズにどのように影響するかはわかりません。
ただし、Rjlopes には一理あります。ブラウザーが、埋め込まれた JavaScript/CSS リソースをキャッシュできないのは事実かもしれません。チェックアウトする必要がありますが、Rjlopes が正しいと思われます。JavaScript/CSS ファイルは、サーバーにページ全体のポストバックが行われるたびにダウンロードする必要があります。これが真実であることが証明された場合、このパフォーマンス ヒットが決定の要因となるはずです。
私は自分の努力で忙しかったので、埋め込みリソース、resex、および単一ファイルを使用した場合のパフォーマンスの違いをまだテストできていません。私はこれと Rjlopes が提起したブラウザのキャッシング ポイントに非常に興味があるので、今日中にそれを取り上げたいと思います。
私はこれと同じ決定を一度しなければなりませんでした。JavaScript/CSS リソースを DLL に埋め込むことを選択した理由は、アプリケーションが展開された後に、(Web アプリケーションを購入した好奇心旺盛なエンド ユーザーによる) これらのファイルの改ざんを防ぐためです。埋め込みに反対する理由: JavaScript コードのすべてが必要なわけではありません。そのため、帯域幅/処理を不必要に増やしている可能性があります。
埋め込む理由: ブラウザは JavaScript ファイルを並行してダウンロードしません。ファイルがダウンロードされるまで、ロック状態になります。
埋め込みに反対する理由: JavaScript コードのすべてが必要なわけではありません。そのため、帯域幅/処理を不必要に増やしている可能性があります。
ブラウザのキャッシュに関しては、私が気づいた限りでは、WebRecource.axd の応答は「304 変更されていません」と表示されます。つまり、それらはキャッシュから取得されたものだと思います。
誰かがあなたの JS や CSS を改ざんしたい場合、Reflector でアセンブリを開き、リソースに移動して必要なものを編集するだけでよいことを知っています (アセンブリが署名されている場合は、おそらくさらに多くの作業が必要になります)。
ページに js と css を埋め込むと、ページが大きくなり (リクエストごとにダウンロードする KB が増えます)、ブラウザは次のリクエストのために JS と CSS をキャッシュできません。幸いなことに、リクエストが少なくなり (私のように複数の js と css と 1 つを組み合わせる場合は少なくとも 2 つ)、さらに JavaScript には連続してダウンロードされるという問題があります。