ASP.NETサイトのパフォーマンス向上-トップページ生成時間の短縮
7740 ワード
次のボトルネックは、トップページの生成時間に影響します.メモリ圧力 キャッシュ CPU利用率 スレッド利用率 外部リソース待ち時間 ボトルネックの特定方法
ピクチャ JavaScript,CSS 認証が必要なページ 検索エンジンがウェブサイトの一部にアクセスすることを阻止し、ウェブサイトのルートディレクトリにrobotsという名前を置く.txtの純粋なテキストファイル.
検索エンジンのアクセスを完全にブロックし、次の操作を行います.
検索エンジンが指定したフォルダにアクセスするのを阻止するには、次の手順に従います.
一部の主流の検索エンジンでは、爬虫類へのアクセスを減らすことができます.
もう1つの方法はsite mapを提供することである.site mapは、Webサイトのルートディレクトリに配置されたXMLファイルで、Webサイトの各ファイルが含まれています.
完全なsite map仕様:http://www.sitemaps.org/.
盗難防止モジュール:http://www.iis.net/community/default.aspx?tabid=34&i=1288&g=6.
Webサイトにデータベースを更新したり、他の高価なアクションを実行したりするフォームがある場合は、ロボットではなくフォームをコミットした人がいることを確認します.
フォームがコミットされたことを確認する方法の1つは、検証コードを使用することです.
フォームの認証コードライブラリを挿入できます. reCAPTCHA: http://recaptcha.net . BotDetect CAPTCHA: http://captcha.biz . http://haacked.com/archive/2006/09/26/Lightweight_Invisible_CAPTCHA_Validator_Control.aspx .
ウェブサイトに役に立つコンテンツがたくさんある場合は、ブレードプログラムで自動的に読み取る人がいる可能性があります.たとえば、これらのコンテンツを使用して自分のWebサイトを公開し、広告を公開することができます.
ブレードプログラムはソースIPアドレスを変更せず、読み取り頻度も高いためです.このような簡単なコードは、これらのアクセスを遮断することができます.
これらのコードはサービス拒否攻撃を防止することはできず,これらの攻撃ではソースIPが修正され,攻撃検出が困難になる.
次のコードは、簡単なブレードプログラムをブロックします.
これは単純なサンプルコードにすぎません.それを生産環境に入れないでください.Googleの爬虫類や他の検索エンジンを阻止したくないホワイトリストが必要かもしれません.
最後に、IPアドレスはアクセスを識別する信頼できる証拠ではないことを覚えておく. ISPまたは企業は、すべてのアクセス者が同じIPアドレスを持つように、エージェントまたはファイアウォールを使用することができます. いくつかのISPは、ダイヤルアップユーザに動的IPを与え、その後、別のユーザがこのIPを使用する可能性がある.
もう1つの不要なトラフィックのソースは、訪問者が彼らが望んでいるものを見つけていないか、何をしたいのか分からないことです.あなたのサイトが使いやすいと、トラフィックが減少します.
ボトルネックの特定方法
メモリ
まず、サーバがメモリを消費しているかどうかを確認します.そうであれば、CPU使用率とディスクI/Oが増加します.メモリが消費されると、ディスク上の交換ファイルが使用されるためです.そのため、メモリ圧力の問題を解決してCPUとディスクの圧力を減らすことができます.
コマンドラインプロンプトでperfmonを実行し、パフォーマンスモニタにMemory->Pages/secカウンタを追加します.このカウンタは1秒あたりのページ数を統計します.ページファイルを頻繁に使用する場合は、メモリにボトルネックがあることを示します.
キャッシュ
キャッシュはプログラムの実行効率を向上させますが、メモリが消費されます.
CPU
perfmonでProcessor->%Processor Timeカウンタを使用します.
スレッド
スレッドプール内のスレッドの数には制限があります..NET2.0スレッド数はCPU数の12倍です.3.5、4.0はIIS 7クラシックモードではCPU数の12倍、集積モードではCPU数の100倍である.
ASPを使用することができる.NET->Request Execution Time(各リクエストを処理するミリ秒数)、Requests Current(キューに並ぶリクエストと実行中のリクエストを含むリクエスト数)、ASP.NET Applications->Requests Executing(実行中のリクエスト)カウンタ.
Requests CurrentがRequests Executingよりもはるかに大きい場合は、スレッドを待っているリクエストがたくさんあることを示します.
長い待ち時間
Request Executionの値が高く、CPUとメモリの圧力が高くない場合、実行スレッドごとにデータベースなどの外部リソースを待つ必要がある場合があります.
その他の措置
サーバの負荷を削減する他の方法があります
配置
releaseモードでプロジェクトを生成するには
releaseモードはCPUとメモリの使用を減らすことができます
Webサイトの公開
Webアプリケーションプロジェクトを使用せずにWebサイトを使用している場合は、リリースWebサイトはreleaseモードでWebサイトをコンパイルします.
デバッグ禁止モード
Webでconfigではdebugモードは禁止されています.
プログラムセットの数を減らす
Webサイトをパブリッシュすると、フォルダにプログラムセットが生成されます.次の2つのリンクでは、プログラムセットの数を減らすことができます.
http://msdn.microsoft.com/en-us/library/aa479568.aspx
http://www.microsoft.com/downloads/en/details.aspx?FamilyId=0AA30AE8-C73B-4BDD-BB1B-FE697256C459&displaylang=en
往復時間を短縮
サーバを使用します。TransferがResponseに代わる.Redirect
サーバを使用します.Transferの欠点は、2つの異なるページが同じURLを持っていることです.これは、特にこのURLをコレクションしたり、他の人と共有したりすることに惑わされる可能性があります.
したがって,transferがページに入ることに明確に関連するページのみをtransferする.たとえば、アクセス者はフォームをコミットし、フォームのコミットの結果を表示するページをtransferできます.まったく関係のないページに移動しないでください.あるページのpost backが常に別のページに移行していることを知っている場合は、PostBackUrlを使用して直接post backをこのページに移行することを考慮します.
URLにデフォルトページを指定
IISは自動的にhttp://mydomain/myfolder転向先http://mydomain/myfolder/.それにSysもデフォルトページをキャッシュしません.使用http://mydomain/myfolder/default.aspxこれにより、ステアリングを防止してキャッシュを行うことができます.
えいきゅうステアリング
永続的なステアリングブラウザとエージェントを使用すると、キャッシュが更新され、検索エンジンも使用されます.これにより、古いページへのアクセスを減らすことができます.
プログラミングインプリメンテーション301の転向:Response.StatusCode = 301;
Response.AddHeader("Location", "NewPage.aspx");
Response.End();
.NET 4以降:Response.RedirectPermanent("NewPage.aspx");
IISを設定して、永久ステアリングを行うこともできます.
CNAMEレコードの削減
DNSでは、AレコードはCNAMEレコードよりも優れている.CNAMEは解析のために別の往復を必要とする場合がある.
SSL
SSLを使用すると、サーバとブラウザが対話する時間の割合が、ページの生成と転送の時間に比べて大きいため、小さな静的ページに大きな影響を及ぼします.データベースへのアクセスに関連するページなど、大きなページを生成する場合、影響はそれほど大きくありません.
SSLを使用する場合は、暗号化ページが非暗号化ページを参照する場合や、非暗号化ページが暗号化ページを参照する場合は、絶対リンクアドレスを使用します.または、全局で絶対リンクアドレスを使用します.
暗号化されたページに画像がある場合は、HTTPSを使用する必要があります.そうしないと、訪問者は警告を受けます.
不要なアクセス要求
すべてのリクエストは、特にデータベース・アクセスなどの高価な操作に関連して、サーバの負荷を増大させます.不要なアクセスリクエストを阻止したいかもしれません.
検索エンジン
検索エンジンがあなたのサイトに登るのはいいことです.しかし、検索リストとは関係なく、プライベートなファイルにアクセスする必要はありません.これらのファイルには、次のものが含まれます.
サーバの負荷を削減する他の方法があります
配置
releaseモードでプロジェクトを生成するには
releaseモードはCPUとメモリの使用を減らすことができます
Webサイトの公開
Webアプリケーションプロジェクトを使用せずにWebサイトを使用している場合は、リリースWebサイトはreleaseモードでWebサイトをコンパイルします.
デバッグ禁止モード
Webでconfigではdebugモードは禁止されています.
プログラムセットの数を減らす
Webサイトをパブリッシュすると、フォルダにプログラムセットが生成されます.次の2つのリンクでは、プログラムセットの数を減らすことができます.
http://msdn.microsoft.com/en-us/library/aa479568.aspx
http://www.microsoft.com/downloads/en/details.aspx?FamilyId=0AA30AE8-C73B-4BDD-BB1B-FE697256C459&displaylang=en
往復時間を短縮
サーバを使用します。TransferがResponseに代わる.Redirect
サーバを使用します.Transferの欠点は、2つの異なるページが同じURLを持っていることです.これは、特にこのURLをコレクションしたり、他の人と共有したりすることに惑わされる可能性があります.
したがって,transferがページに入ることに明確に関連するページのみをtransferする.たとえば、アクセス者はフォームをコミットし、フォームのコミットの結果を表示するページをtransferできます.まったく関係のないページに移動しないでください.あるページのpost backが常に別のページに移行していることを知っている場合は、PostBackUrlを使用して直接post backをこのページに移行することを考慮します.
URLにデフォルトページを指定
IISは自動的にhttp://mydomain/myfolder転向先http://mydomain/myfolder/.それにSysもデフォルトページをキャッシュしません.使用http://mydomain/myfolder/default.aspxこれにより、ステアリングを防止してキャッシュを行うことができます.
えいきゅうステアリング
永続的なステアリングブラウザとエージェントを使用すると、キャッシュが更新され、検索エンジンも使用されます.これにより、古いページへのアクセスを減らすことができます.
プログラミングインプリメンテーション301の転向:
Response.StatusCode = 301;
Response.AddHeader("Location", "NewPage.aspx");
Response.End();
.NET 4以降:
Response.RedirectPermanent("NewPage.aspx");
IISを設定して、永久ステアリングを行うこともできます.
CNAMEレコードの削減
DNSでは、AレコードはCNAMEレコードよりも優れている.CNAMEは解析のために別の往復を必要とする場合がある.
SSL
SSLを使用すると、サーバとブラウザが対話する時間の割合が、ページの生成と転送の時間に比べて大きいため、小さな静的ページに大きな影響を及ぼします.データベースへのアクセスに関連するページなど、大きなページを生成する場合、影響はそれほど大きくありません.
SSLを使用する場合は、暗号化ページが非暗号化ページを参照する場合や、非暗号化ページが暗号化ページを参照する場合は、絶対リンクアドレスを使用します.または、全局で絶対リンクアドレスを使用します.
暗号化されたページに画像がある場合は、HTTPSを使用する必要があります.そうしないと、訪問者は警告を受けます.
不要なアクセス要求
すべてのリクエストは、特にデータベース・アクセスなどの高価な操作に関連して、サーバの負荷を増大させます.不要なアクセスリクエストを阻止したいかもしれません.
検索エンジン
検索エンジンがあなたのサイトに登るのはいいことです.しかし、検索リストとは関係なく、プライベートなファイルにアクセスする必要はありません.これらのファイルには、次のものが含まれます.
検索エンジンのアクセスを完全にブロックし、次の操作を行います.
User-agent: *
Disallow: /
検索エンジンが指定したフォルダにアクセスするのを阻止するには、次の手順に従います.
User-agent: *
Disallow: /images/
Disallow: /js/
Disallow: /css/
Disallow: /private/
一部の主流の検索エンジンでは、爬虫類へのアクセスを減らすことができます.
User-agent: *
Crawl-delay: 10
もう1つの方法はsite mapを提供することである.site mapは、Webサイトのルートディレクトリに配置されたXMLファイルで、Webサイトの各ファイルが含まれています.
完全なsite map仕様:http://www.sitemaps.org/.
鎖を盗む
盗難防止モジュール:http://www.iis.net/community/default.aspx?tabid=34&i=1288&g=6.
検証コード
Webサイトにデータベースを更新したり、他の高価なアクションを実行したりするフォームがある場合は、ロボットではなくフォームをコミットした人がいることを確認します.
フォームがコミットされたことを確認する方法の1つは、検証コードを使用することです.
フォームの認証コードライブラリを挿入できます.
スクレーパプログラム
ウェブサイトに役に立つコンテンツがたくさんある場合は、ブレードプログラムで自動的に読み取る人がいる可能性があります.たとえば、これらのコンテンツを使用して自分のWebサイトを公開し、広告を公開することができます.
ブレードプログラムはソースIPアドレスを変更せず、読み取り頻度も高いためです.このような簡単なコードは、これらのアクセスを遮断することができます.
これらのコードはサービス拒否攻撃を防止することはできず,これらの攻撃ではソースIPが修正され,攻撃検出が困難になる.
次のコードは、簡単なブレードプログラムをブロックします.
public class BotDefence {
private const int intervalSeconds = 5;
private const int maxRequestsInterval = 100;
private const int blockedPeriodSeconds = 20;
public static bool IsBotAttack() {
string visitorIP = HttpContext.Current.Request.UserHostAddress;
VisitorInfo visitorInfo = (VisitorInfo)HttpContext.Current.Cache[visitorIP] as VisitorInfo;
if(visitorInfo == null) {
HttpContext.Current.Cache.Insert(visitorIP, new VisitorInfo(), null, DateTime.Now.AddSeconds(intervalSecods), System.Web.Caching.Cache.NoSlidingExpiration);
}
else {
if(visitorInfo.blocked) {
return true;
}
visitorInfo.nbrHits++;
if(visitorInfo.nbrHits > maxRequestsInterval) {
visitorInfo.blocked = true;
HttpContext.Current.Cache.Insert(visitorIP, visitorInfo, null, DateTime.Now.AddSeconds(blockedPeriodSeconds), System.Web.Caching.Cache.NoSlidingExpiration);
return true;
}
}
return false;
}
private class VisitorInfo {
public int nbrHits;
public bool blocked;
public VisitorInfo() {
nbrHits = 1;
blocked = false;
}
}
}
onload :
protected void Page_Load(object sender, EventArgs e) {
if(BotDefence.IsBotAttack()) {
Response.End();
return;
}
}
これは単純なサンプルコードにすぎません.それを生産環境に入れないでください.Googleの爬虫類や他の検索エンジンを阻止したくないホワイトリストが必要かもしれません.
最後に、IPアドレスはアクセスを識別する信頼できる証拠ではないことを覚えておく.
可用性テスト
もう1つの不要なトラフィックのソースは、訪問者が彼らが望んでいるものを見つけていないか、何をしたいのか分からないことです.あなたのサイトが使いやすいと、トラフィックが減少します.