From 5511863d7f32859352a4681d76b8e8c50d47e020 Mon Sep 17 00:00:00 2001 From: Lightczx <1686188646@qq.com> Date: Fri, 31 May 2024 10:12:57 +0800 Subject: [PATCH] optimize home page load speed --- .../Snap.Hutao/Control/ScopedPage.cs | 6 +++++ .../Control/Theme/TransitionCollection.xaml | 4 ++-- src/Snap.Hutao/Snap.Hutao/Snap.Hutao.csproj | 2 +- .../View/Helper/DeferContentLoader.cs | 22 ++++++++++++++++--- .../View/Helper/IDeferContentLoader.cs | 6 ++++- .../ViewModel/Home/AnnouncementViewModel.cs | 1 + 6 files changed, 34 insertions(+), 7 deletions(-) diff --git a/src/Snap.Hutao/Snap.Hutao/Control/ScopedPage.cs b/src/Snap.Hutao/Snap.Hutao/Control/ScopedPage.cs index 108bda3e..91756b92 100644 --- a/src/Snap.Hutao/Snap.Hutao/Control/ScopedPage.cs +++ b/src/Snap.Hutao/Snap.Hutao/Control/ScopedPage.cs @@ -3,6 +3,7 @@ using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; +using Microsoft.UI.Xaml.Markup; using Microsoft.UI.Xaml.Navigation; using Snap.Hutao.Service.Navigation; using Snap.Hutao.View.Helper; @@ -37,6 +38,11 @@ internal class ScopedPage : Page extra.NotifyNavigationCompleted(); } + public virtual void UnloadObjectOverride(DependencyObject unloadableObject) + { + XamlMarkupHelper.UnloadObject(unloadableObject); + } + /// /// 初始化 /// 应当在 InitializeComponent() 前调用 diff --git a/src/Snap.Hutao/Snap.Hutao/Control/Theme/TransitionCollection.xaml b/src/Snap.Hutao/Snap.Hutao/Control/Theme/TransitionCollection.xaml index 02b9df16..fff27230 100644 --- a/src/Snap.Hutao/Snap.Hutao/Control/Theme/TransitionCollection.xaml +++ b/src/Snap.Hutao/Snap.Hutao/Control/Theme/TransitionCollection.xaml @@ -1,4 +1,4 @@ - + @@ -20,4 +20,4 @@ - + \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Snap.Hutao.csproj b/src/Snap.Hutao/Snap.Hutao/Snap.Hutao.csproj index 57c4d436..37fbbba5 100644 --- a/src/Snap.Hutao/Snap.Hutao/Snap.Hutao.csproj +++ b/src/Snap.Hutao/Snap.Hutao/Snap.Hutao.csproj @@ -340,7 +340,7 @@ all runtime; build; native; contentfiles; analyzers - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/Snap.Hutao/Snap.Hutao/View/Helper/DeferContentLoader.cs b/src/Snap.Hutao/Snap.Hutao/View/Helper/DeferContentLoader.cs index 969751ec..a78484b6 100644 --- a/src/Snap.Hutao/Snap.Hutao/View/Helper/DeferContentLoader.cs +++ b/src/Snap.Hutao/Snap.Hutao/View/Helper/DeferContentLoader.cs @@ -2,6 +2,8 @@ // Licensed under the MIT license. using Microsoft.UI.Xaml; +using Microsoft.UI.Xaml.Markup; +using Snap.Hutao.Control; namespace Snap.Hutao.View.Helper; @@ -11,14 +13,28 @@ internal sealed class DeferContentLoader : IDeferContentLoader public DeferContentLoader(FrameworkElement element) { - this.reference.SetTarget(element); + reference.SetTarget(element); } - public void Load(string name) + public DependencyObject? Load(string name) { if (reference.TryGetTarget(out FrameworkElement? element)) { - element.FindName(name); + return element.FindName(name) as DependencyObject; + } + + return default; + } + + public void Unload(DependencyObject @object) + { + if (reference.TryGetTarget(out FrameworkElement? element) && element is ScopedPage scopedPage) + { + scopedPage.UnloadObjectOverride(@object); + } + else + { + XamlMarkupHelper.UnloadObject(@object); } } } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/View/Helper/IDeferContentLoader.cs b/src/Snap.Hutao/Snap.Hutao/View/Helper/IDeferContentLoader.cs index 99b61cdb..542a5452 100644 --- a/src/Snap.Hutao/Snap.Hutao/View/Helper/IDeferContentLoader.cs +++ b/src/Snap.Hutao/Snap.Hutao/View/Helper/IDeferContentLoader.cs @@ -1,9 +1,13 @@ // Copyright (c) DGP Studio. All rights reserved. // Licensed under the MIT license. +using Microsoft.UI.Xaml; + namespace Snap.Hutao.View.Helper; internal interface IDeferContentLoader { - void Load(string name); + DependencyObject? Load(string name); + + void Unload(DependencyObject @object); } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/Home/AnnouncementViewModel.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/Home/AnnouncementViewModel.cs index e78f73c1..9daa3bb8 100644 --- a/src/Snap.Hutao/Snap.Hutao/ViewModel/Home/AnnouncementViewModel.cs +++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/Home/AnnouncementViewModel.cs @@ -7,6 +7,7 @@ using Snap.Hutao.Service.Announcement; using Snap.Hutao.Service.Hutao; using Snap.Hutao.View.Card; using Snap.Hutao.View.Card.Primitive; +using Snap.Hutao.View.Page; using Snap.Hutao.Web.Hoyolab.Hk4e.Common.Announcement; using System.Collections.ObjectModel;