which is the best way to save this information
ページ表示のパフォーマンスに影響を与えないようにするのに役立つ3つの方法があり、どのデータを保存して維持するかだけを気にします。
最初の方法
ページから画像として呼び出すハンドラーを使用して、この統計カウンターを書き込むことのみができます。このハンドラーでは、セッションを使用しないため、他のページをブロックすることもありません。また、これはほとんどのスパイダーから呼び出されないため、実際のユーザーのみを記述します。
この方法でページに電話をかけます。
<img src="keepstats.ashx?Page=CurrentPage.aspx" height="1" width="1" alt="" >
ハンドラーは
// 1x1 transparent GIF
private readonly byte[] GifData = {
0x47, 0x49, 0x46, 0x38, 0x39, 0x61,
0x01, 0x00, 0x01, 0x00, 0x80, 0xff,
0x00, 0xff, 0xff, 0xff, 0x00, 0x00,
0x00, 0x2c, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x01, 0x00, 0x00, 0x02,
0x02, 0x44, 0x01, 0x00, 0x3b
};
public void ProcessRequest (HttpContext context)
{
// save here your stat counter
// send the image
context.Response.ContentType = "image/gif";
context.Response.Buffer = false;
context.Response.OutputStream.Write(GifData, 0, GifData.Length);
}
2番目の方法
この関数をコードビハインドからではなく、そのように最後のページ内から呼び出すこと。この場合の不利な点は、セッションがページをロックしており、次のリクエストを続行できるようにページを完全にロードする必要があることです。しかし、最も簡単に作成できます。
<body>
... all the page here...
..bottom of the page..
<%
// you send this part of the page and user all ready see it
Response.Flush();
// now you call the function that calculate the statistics
// the page still show that is loading, but the user all ready see it
CallTheStatisticSaveFunction();
%>
</body>
第三の道
作業を並行してページから独立させるためのスレッドを作成する方法をもう1つ忘れています。
最後の言葉
私のコードでは、上記のすべてのトリックを使用します。1つは統計用で、もう1つはページで実行する必要があるが、もう少し時間がかかる可能性のあるアクション用です。ページのレンダリングを開始する前に実行する必要のあるアクションにスレッドを使用しますが、スレッドが終了しない場合は、自分が持っているものをレンダリングするというトリックがいくつかあります。
この理由から、ユーザー全員がページを見る準備ができているかどうかを知るためのセッションは避けます。
- ユーザーがCookieを使用しない場合、セッションは機能せず、すべてのスパイダーはセッションを使用しません
- ユーザーが多くのページを見始めると、セッションデータは大きくなります。
iisを閉じるか、アプリケーションを停止すると、これApplication_End
は1つだけと呼ばれます。グローバルで毎回呼び出されるポイントは、Application_BeginRequest
パフォーマンスに影響を与える可能性があります。これは、すべてのasp.net要素に対して呼び出され、そのページかどうか、他の何かがあるかどうか、およびこれをページの最初のポイントで確認する必要があるためです。 、そこで遅延が発生します。ユーザーが何かを見た後、最後に統計を書く方法をここで検索します。