From 3514d765a6745b3e198756fced37fb95701312a6 Mon Sep 17 00:00:00 2001 From: Sebastiaan Janssen Date: Sun, 22 Jan 2017 12:22:54 +0100 Subject: [PATCH] Optimize and cache member data, move from unnecessary macros to regular partials in the master and community templates --- OurUmbraco.Site/OurUmbraco.Site.csproj | 14 +- OurUmbraco.Site/Views/Community.cshtml | 10 +- .../MacroPartials/Members/JsValues.cshtml | 18 -- OurUmbraco.Site/Views/Master.cshtml | 28 +- .../Community/Home.cshtml | 252 +++++++++--------- .../Views/Partials/Community/JsValues.cshtml | 46 ++++ .../Community/Scripts.cshtml | 5 +- .../Global/Alertbar.cshtml} | 12 +- .../Views/Partials/Members/Login.cshtml | 20 +- .../Members/QuickMenu.cshtml | 115 +++++--- .../Navigation/TopNavigation.cshtml | 19 +- 11 files changed, 307 insertions(+), 232 deletions(-) delete mode 100644 OurUmbraco.Site/Views/MacroPartials/Members/JsValues.cshtml rename OurUmbraco.Site/Views/{MacroPartials => Partials}/Community/Home.cshtml (90%) create mode 100644 OurUmbraco.Site/Views/Partials/Community/JsValues.cshtml rename OurUmbraco.Site/Views/{MacroPartials => Partials}/Community/Scripts.cshtml (86%) rename OurUmbraco.Site/Views/{MacroPartials/Global/AlertBar.cshtml => Partials/Global/Alertbar.cshtml} (76%) rename OurUmbraco.Site/Views/{MacroPartials => Partials}/Members/QuickMenu.cshtml (61%) rename OurUmbraco.Site/Views/{MacroPartials => Partials}/Navigation/TopNavigation.cshtml (69%) diff --git a/OurUmbraco.Site/OurUmbraco.Site.csproj b/OurUmbraco.Site/OurUmbraco.Site.csproj index c0e1387d..0357fa4d 100644 --- a/OurUmbraco.Site/OurUmbraco.Site.csproj +++ b/OurUmbraco.Site/OurUmbraco.Site.csproj @@ -1687,8 +1687,6 @@ - - @@ -1696,7 +1694,6 @@ - @@ -1717,7 +1714,6 @@ - @@ -1734,7 +1730,6 @@ - @@ -1750,13 +1745,15 @@ + + + - @@ -4346,8 +4343,6 @@ - - @@ -4367,6 +4362,9 @@ + + + web.config diff --git a/OurUmbraco.Site/Views/Community.cshtml b/OurUmbraco.Site/Views/Community.cshtml index 5e16550e..d53eeff6 100644 --- a/OurUmbraco.Site/Views/Community.cshtml +++ b/OurUmbraco.Site/Views/Community.cshtml @@ -3,9 +3,10 @@ Layout = "~/Views/Master.cshtml"; } -@Umbraco.RenderMacro("CommunityHome") +@Html.Partial("~/Views/Partials/Community/Home.cshtml") -@section Search { +@section Search +{ } -@Umbraco.RenderMacro("CommunityHomeScripts") \ No newline at end of file +@section EndScripts +{ + @Html.Partial("~/Views/Partials/Community/Scripts.cshtml") +} \ No newline at end of file diff --git a/OurUmbraco.Site/Views/MacroPartials/Members/JsValues.cshtml b/OurUmbraco.Site/Views/MacroPartials/Members/JsValues.cshtml deleted file mode 100644 index 41b47ff0..00000000 --- a/OurUmbraco.Site/Views/MacroPartials/Members/JsValues.cshtml +++ /dev/null @@ -1,18 +0,0 @@ -@using OurUmbraco.Forum.Extensions -@inherits Umbraco.Web.Macros.PartialViewMacroPage - -@if(Members.IsLoggedIn()){ - - - var profile = Members.GetCurrentMemberProfileModel(); - var member = Members.GetCurrentMember(); - - if (member != null) { - - } - -} \ No newline at end of file diff --git a/OurUmbraco.Site/Views/Master.cshtml b/OurUmbraco.Site/Views/Master.cshtml index 2fc45814..9cedfd8c 100644 --- a/OurUmbraco.Site/Views/Master.cshtml +++ b/OurUmbraco.Site/Views/Master.cshtml @@ -20,7 +20,7 @@ Html.RequiresCss("https://fonts.googleapis.com/css?family=Asap:400,700,400italic,700italic", 0); Html.RequiresCss("https://cdnjs.cloudflare.com/ajax/libs/fancybox/2.1.5/jquery.fancybox.min.css", 0); - + Html.RequiresJs("https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.13.1/jquery.validate.min.js"); Html.RequiresJs("https://ajax.aspnetcdn.com/ajax/mvc/4.0/jquery.validate.unobtrusive.min.js"); Html.RequiresJs("https://cdnjs.cloudflare.com/ajax/libs/pagedown/1.0/Markdown.Converter.js"); @@ -72,7 +72,21 @@ - @Umbraco.RenderMacro("Title") + @{ + var title = string.Empty; + var topicTitle = HttpContext.Current.Items["topicTitle"]; + if (topicTitle != null) + { + title = topicTitle.ToString(); + } + + if (string.IsNullOrWhiteSpace(title) == false) + { + <text>@title - </text> + } + } + + @Model.Content.Name - our.umbraco.org @@ -82,7 +96,7 @@ - @Umbraco.RenderMacro("MembersJsValues") + @Html.Partial("~/Views/Partials/Community/JsValues.cshtml") @Html.RenderCssHere() @@ -112,7 +126,7 @@ - @Umbraco.RenderMacro("MembersQuickMenu") + @Html.Partial("~/Views/Partials/Members/QuickMenu.cshtml")
@@ -126,7 +140,7 @@
@@ -136,7 +150,7 @@ @{ if (memberIsBlocked == false) { - @Umbraco.RenderMacro("GlobalAlertBar") + @Html.Partial("~/Views/Partials/Global/AlertBar.cshtml") @RenderSection("Search", false) @RenderBody() } @@ -175,7 +189,7 @@ - + @Html.RenderJsHere() +} + +@functions +{ + public class MemberJsValues + { + public string Name { get; set; } + public string Email { get; set; } + public string Icon { get; set; } + } +} diff --git a/OurUmbraco.Site/Views/MacroPartials/Community/Scripts.cshtml b/OurUmbraco.Site/Views/Partials/Community/Scripts.cshtml similarity index 86% rename from OurUmbraco.Site/Views/MacroPartials/Community/Scripts.cshtml rename to OurUmbraco.Site/Views/Partials/Community/Scripts.cshtml index 387314f7..c38ac387 100644 --- a/OurUmbraco.Site/Views/MacroPartials/Community/Scripts.cshtml +++ b/OurUmbraco.Site/Views/Partials/Community/Scripts.cshtml @@ -1,5 +1,4 @@ -@inherits Umbraco.Web.Macros.PartialViewMacroPage - \ No newline at end of file + \ No newline at end of file diff --git a/OurUmbraco.Site/Views/MacroPartials/Global/AlertBar.cshtml b/OurUmbraco.Site/Views/Partials/Global/Alertbar.cshtml similarity index 76% rename from OurUmbraco.Site/Views/MacroPartials/Global/AlertBar.cshtml rename to OurUmbraco.Site/Views/Partials/Global/Alertbar.cshtml index 6428e7c6..8992d8dd 100644 --- a/OurUmbraco.Site/Views/MacroPartials/Global/AlertBar.cshtml +++ b/OurUmbraco.Site/Views/Partials/Global/Alertbar.cshtml @@ -1,6 +1,6 @@ -@using System.Drawing +@using System.Drawing @using OurUmbraco.Our -@inherits Umbraco.Web.Macros.PartialViewMacroPage +@inherits UmbracoViewPage @{ var home = Umbraco.TypedContentAtRoot().First(); var notificationText = home.GetPropertyValue("mainNotification"); @@ -14,15 +14,15 @@ @Html.Action("RenderTerms", "TermsAndConditions") -@* We'll show it differently on the homepage *@ -@if (showNotification && Model.Content.Id != home.Id) +@* We'll show it differently on the homepage *@ +@if (showNotification && Model.Id != home.Id) {
@Html.Raw(notificationText)
} - -@if (Request.Cookies["dismissAvatar"] == null && CurrentPage.Id != home.Id && avatarImage != null && (avatarImage.Width < 400 || avatarImage.Height < 400)) + +@if (Request.Cookies["dismissAvatar"] == null && Model.Id != home.Id && avatarImage != null && (avatarImage.Width < 400 || avatarImage.Height < 400)) {
diff --git a/OurUmbraco.Site/Views/Partials/Members/Login.cshtml b/OurUmbraco.Site/Views/Partials/Members/Login.cshtml index 7483a54a..32b29a04 100644 --- a/OurUmbraco.Site/Views/Partials/Members/Login.cshtml +++ b/OurUmbraco.Site/Views/Partials/Members/Login.cshtml @@ -1,4 +1,4 @@ -@using OurUmbraco.Our.Controllers +@using OurUmbraco.Our.Controllers @using reCAPTCHA.MVC @inherits UmbracoViewPage @{ @@ -37,14 +37,14 @@ } -
+
- + .input-validation-error { + border-color: red !important; + } + diff --git a/OurUmbraco.Site/Views/MacroPartials/Members/QuickMenu.cshtml b/OurUmbraco.Site/Views/Partials/Members/QuickMenu.cshtml similarity index 61% rename from OurUmbraco.Site/Views/MacroPartials/Members/QuickMenu.cshtml rename to OurUmbraco.Site/Views/Partials/Members/QuickMenu.cshtml index c0769a29..6efcfa87 100644 --- a/OurUmbraco.Site/Views/MacroPartials/Members/QuickMenu.cshtml +++ b/OurUmbraco.Site/Views/Partials/Members/QuickMenu.cshtml @@ -1,29 +1,72 @@ -@inherits Umbraco.Web.Macros.PartialViewMacroPage +@inherits UmbracoViewPage @using System.Drawing @using OurUmbraco.Forum.Extensions +@using OurUmbraco.Forum.Models @using OurUmbraco.Forum.Services @using OurUmbraco.Our +@using Umbraco.Core.Cache @{ - var topicService = new TopicService(ApplicationContext.DatabaseContext); - Image avatarImage = null; + MemberData profile = null; if (Members.IsLoggedIn()) { - avatarImage = Utils.GetMemberAvatarImage(Members.GetCurrentMember()); + var userName = Members.CurrentUserName; + + profile = ApplicationContext.ApplicationCache.RuntimeCache + .GetCacheItem("MemberData" + userName, + GetMemberData, TimeSpan.FromMinutes(5)); } } + +@functions +{ + public class MemberData + { + public int Id { get; set; } + public string Name { get; set; } + public string TwitterHandle { get; set; } + public int Karma { get; set; } + public bool IsAdmin { get; set; } + public IEnumerable Roles { get; set; } + public IEnumerable LatestTopics { get; set; } + public int NumberOfForumPosts { get; set; } + public string Avatar { get; set; } + public Image AvatarImage { get; set; } + } + + public MemberData GetMemberData() + { + var member = Members.GetCurrentMember(); + var avatarImage = Utils.GetMemberAvatarImage(member); + + var roles = member.GetRoles(); + + var topicService = new TopicService(ApplicationContext.DatabaseContext); + var latestTopics = topicService.GetLatestTopicsForMember(member.Id, maxCount: 100); + + var memberData = new MemberData + { + Id = member.Id, + Name = member.Name, + AvatarImage = avatarImage, + Roles = roles, + LatestTopics = latestTopics, + Avatar = Utils.GetMemberAvatar(member, 100), + NumberOfForumPosts = member.ForumPosts(), + Karma = member.Karma(), + TwitterHandle = member.GetPropertyValue("twitter").Replace("@", string.Empty), + IsAdmin = member.IsAdmin() + }; + + return memberData; + } +} +
- - @if (Members.IsLoggedIn() && Members.GetCurrentMember() != null) + @if (profile != null) { - var member = Members.GetCurrentMember(); - - var roles = member.GetRoles(); - - var latestTopics = topicService.GetLatestTopicsForMember(member.Id, maxCount: 100); -
Close
@@ -31,49 +74,47 @@ Edit profile
-
- @Html.Raw(Utils.GetMemberAvatar(member, 100)) + @Html.Raw(profile.Avatar)
- diff --git a/OurUmbraco.Site/Views/MacroPartials/Navigation/TopNavigation.cshtml b/OurUmbraco.Site/Views/Partials/Navigation/TopNavigation.cshtml similarity index 69% rename from OurUmbraco.Site/Views/MacroPartials/Navigation/TopNavigation.cshtml rename to OurUmbraco.Site/Views/Partials/Navigation/TopNavigation.cshtml index eb0c9fb3..35a502f6 100644 --- a/OurUmbraco.Site/Views/MacroPartials/Navigation/TopNavigation.cshtml +++ b/OurUmbraco.Site/Views/Partials/Navigation/TopNavigation.cshtml @@ -1,22 +1,21 @@ -@using System.Collections.Specialized -@using System.Drawing +@using System.Drawing @using OurUmbraco.Our -@inherits Umbraco.Web.Macros.PartialViewMacroPage +@inherits UmbracoViewPage @{ @* Get the root of the website *@ - var root = CurrentPage.AncestorOrSelf(1); - Image avatarImage = null; - if (Members.IsLoggedIn()) - { - avatarImage = Utils.GetMemberAvatarImage(Members.GetCurrentMember()); - } +var root = Model.AncestorOrSelf(1); +Image avatarImage = null; +if (Members.IsLoggedIn()) +{ + avatarImage = Utils.GetMemberAvatarImage(Members.GetCurrentMember()); +} }
    @foreach (var page in root.Children.Where("Visible")) { -
  • +
  • @page.Name
  • }