그래서 데이터베이스를 쿼리하는 대시 보드를 개발했습니다. 데이터베이스에는 Google 웹 로그 분석에서 Google에 보유한 데이터가 저장되어 있습니다.성능 튜닝 Entity Framework 쿼리
Telerik 컨트롤/위젯과 함께 ASP.NET MVC 5, EF, Linq를 사용하고 있습니다. 컨트롤러는 내 db 컨텍스트와 비즈니스 로직이있는 서비스 계층을 인스턴스화합니다. 각 svc.method()는 뷰 내의 위젯으로 패키지를 해제하기 위해 VM에서 패키지화 한 특정 결과 세트와 관련됩니다.
현재 Google 크롬의 네트워크 탭에서 응답 시간은 5.6 초입니다. 나는 당신에게 나의 접근 방식을 보여주기위한 8 가지 방법 중 하나를 설명했다.
내 질문은; 페이지를 더 빨리로드 할 수 있도록 어떻게 성능을 향상시킬 수 있습니까? 비동기로 각 메소드를 개선하면 어떻게됩니까?
제공 할 수있는 조언이 있으면 미리 감사드립니다.
컨트롤러 :
public ActionResult WebStats()
{
//other code removed for brevity
//Service layer where the db is queried and the business logic is performend
WebStatsService svc = new WebStatsService();
//view model
WebStatsViewModel vm = new WebStatsViewModel();
vm.PageViews = svc.GetPageViews(vm);
vm.UniquePageViews = svc.GetUniquePageViews(vm);
vm.UserRatioByCountry = svc.GetUserRatioByCountry(vm);
vm.PageViewsByCountry = svc.GetPageViewsByCountry(vm);
vm.TopTenHealthCenters = svc.GetTopTenHealthCenters(vm);
vm.UserTypeRatio = svc.GetUserTypeRatio(vm);
vm.TopTenHealthCentersByDateRange = svc.GetTopTenHealthCentersByDateRange(vm);
vm.ReferralSources = svc.GetTopTenReferralSources(vm);//Get top 10 referral paths
return View(vm);
}
서비스 :
public List<PageViews> GetPageViews(WebStatsViewModel vm)
{
using (ApplicationDbContext db = new ApplicationDbContext())
{
List<PageViews> pageViewStats = new List<PageViews>();
var results = db.PageStats.Where(x => (vm.CMS.Equals("All") || x.Source.Equals(vm.CMS))
&& (vm.HealthCenter.Equals("All") || x.HealthSectionName.Equals(vm.HealthCenter))
&& (vm.Country.Equals("All") || x.Country.Equals(vm.Country))
&& (vm.City.Equals("All") || x.City.Equals(vm.City))
&& (x.Date >= vm.StartDate)
&& (x.Date <= vm.EndDate)
).Select(x => new
{
Date = x.Date,
Total = x.PageViews
}).ToList();
var distinctDate = results.OrderBy(x => x.Date).Select(x => x.Date).Distinct();
foreach (var date in distinctDate)
{
PageViews pageViewStat = new PageViews();
pageViewStat.Date = date.Value.ToShortDateString();
pageViewStat.Total = results.Where(x => x.Date == date).Sum(x => x.Total);
pageViewStats.Add(pageViewStat);
}
return pageViewStats;
}
}
이 사이트에 대한 질문은 너무 광범위합니다. 비동기로 만들면 몇 가지 이점을 얻을 수 있지만 마일리지는 다를 수 있습니다. 우리는 귀하가 여기에서 귀하의 질문 중 하나 *를 조정하도록 도와 드릴 수 있지만 일반 레이아웃/실적은 조정할 수 없습니다. – DavidG
감사합니다. @DavidG. 내가 쿼리 응답 시간을 개선 찾고,보기 성능은 다른 이야기입니다. 즉, 나는 다른 접근법에 대한 조언을 찾고있다. 각 위젯을 부분보기로 만들면 응답 성능이 향상됩니까? 나는 다른 전략에 대한 제안을 찾고있다. – JReam
조언은 의견 일 뿐이며, 왜 이것이 적합하지 않은지에 대한 또 다른 이유입니다. 슬프다면 AJAX 호출을 통해 뷰에 데이터를로드하려는 유혹을받을 것입니다. 그러면 각 파트가 검색 될 때 페이지가 표시됩니다. – DavidG