ユーザーがホテルや部屋などの情報を入力する簡単なホテル予約システムに取り組んでいます。すべてのページに、ユーザーが何かをしたときにシステムのフィードバックを表示するフッター バーがあります。たとえば、ユーザーがホテルを追加すると、これを行った後、フッターバーの任意のページにリダイレクトすると、すぐに「ホテルが正常に追加されました」と表示されます。
|----------------------------------------|
| |
| GridView |
| |
| |
|----------------------------------------|
|hotel added successfully ! |
|----------------------------------------|
私が使用している解決策は次のとおりです。ユーザーが何かをログに記録すると、それをログに記録し、shared/_layout で div[id=notification] を定義し、ワーカーを使用してログ データベースをチェックして新しいデータベースを取得する関数を呼び出します。
// i use worker to repeatedly invoke function to check db
var worker = new Worker('../Scripts/worker.js');
worker.addEventListener('message', function (e)
{
if (e.data != "")
{
var result = e.data;
var results = result.split("##");
if ($("#notificationID").val() != results[1])
{
$("#notificationID").val(results[1]);
}
}
}, false);
そして、dbをチェックする関数は
public string GetNewTrans()
{
string userName = Membership.GetUser().UserName;
using (var context = new jobEntities())
{
var query = from p in context.Logs where p.UserName==userName && p.IsNew == null orderby p.ID_Log descending select p;
if (query.Count() > 0)
{
var log = query.FirstOrDefault();
DateTime c= DateTime.Parse(log.RefreshDate.ToString());
var sec = DateTime.Now.Subtract(c).Seconds;
if( sec> 2)
{
log.IsNew = "false";
context.SaveChanges();
}
var result = log.Section + " : " + log.Action +"@@"+log.Success.ToString()+"##"+log.ID_Log.ToString();
return result;
}
return null;
}
}
現在、ユーザー数が増えると、check db の負荷が増加し、ページが遅くなる原因になっていると思います。より良い解決策はありますか?私のフレームワークはasp mvc 3.5で、EF 4.1を使用しています