Blazor WebAssembly 응용 프로그램에서 Syncfusion Blazor 프로그램 세트 로드 지연

Blazor 플랫폼은 lazy loading assemblies부터 .NET 5 Preview 8까지 지원됩니다.특정 부품의 경로설정 경로를 탐색할 때 특정 부품 세트를 로드할 수 있는 기능으로, 필요한 경우에만 브라우저에서 지정된 부품을 로드할 수 있습니다.불러온 프로그램 집합은 캐시되어 미래의 내비게이션에 다시 사용됩니다.
Blazor 지연 로드 프로그램 세트는 BlazorWebAssembly(WASM) 애플리케이션에서만 사용할 수 있습니다.Blazor 서버 측 애플리케이션에는 적합하지 않습니다.
이전 블로그에서 설명한 바와 같이 Syncfusion은 2020 Volume 4 (v18.4.0.30) release부터 지원을 제공합니다.따라서 이제 Blazor UI 구성 요소의 Blazor 프로그램 세트 로드 지연 시간을 활용할 수 있습니다.
이 기능의 실제 효과를 봅시다!

선결 조건

  • .NET 5.0 SDK
  • Visual Studio 2019 v16.8.0
  • Blazor WebAssembly 애플리케이션 생성


    이 섹션에서는 새 Blazor WebAssembly 응용 프로그램을 만들고 각 Syncfusion Blazor NuGet 패키지를 설치합니다.
  • Visual Studio 2019를 열고 새 프로젝트를 만듭니다.그런 다음 Blazor Apps 를 선택하고 * 다음 * 을 클릭합니다. 아래 그림과 같습니다.

  • 새 프로젝트 구성 창이 나타납니다.여기서 생성을 클릭합니다.

  • 다음, 선택.NET 5.0 옵션을 선택하고 목록에서 Blazor WebAssembly Apply를 선택합니다.그런 다음 생성 을 클릭합니다.

  • 항목을 마우스 오른쪽 버튼으로 클릭하고 Manage NuGet Packages 를 선택합니다.
  • 그리고 검색이 동기화됩니다.Blazor 키워드를 입력하고 필요한 Syncfusion Blazor NuGet 패키지를 설치합니다.여기에는 Syncfusion.Blazor.ButtonsSyncfusion.Blazor.Calendars NuGet 패키지가 설치되어 있습니다.아래 화면 캡처를 참조하십시오.
  • Syncfusion Blazor 서비스를 ~/프로그램에 구성합니다.cs 파일은 아래의 코드 예시와 같습니다.
  • using Syncfusion.Blazor;
    
    public class Program
        {
            public static async Task Main(string[] args)
            {
                var builder = WebAssemblyHostBuilder.CreateDefault(args);
    
                ........
                ........
    
                builder.Services.AddSyncfusionBlazor();
                await builder.Build().RunAsync();
            }
        }
    
  • 그리고 *~/wwwroot/index에 Syncfusion Blazor 테마 파일 인용을 추가합니다.html* 파일
  • <!DOCTYPE html>
    <html>
    
    <head>
        ........
        ........
        <link href="BlazorApp1.styles.css" rel="stylesheet" />
        <link href="_content/Syncfusion.Blazor.Themes/bootstrap4.css" rel="stylesheet" />
    </head>
    ........
    ........
    </html>
    
  • 이제 ~/Pages** 폴더에 두 개의 Razor 구성 요소(Button.*Razor 및 Calendar.Razor*)를 추가하고 다음 코드 예시를 추가합니다.*버튼을 누릅니다.면도기**
  • @page "/button"
    
    @using Syncfusion.Blazor.Buttons;
    
    <h3>Syncfusion Blazor Button</h3>
    
    <SfButton>Button</SfButton>
    <SfButton IsPrimary="true">Primary Button</SfButton>
    
    달력면도칼
    @page "/calendar"
    
    @using Syncfusion.Blazor.Calendars; 
    
    <h3>Syncfusion Blazor Calendar</h3>
    
    <SfCalendar TValue="DateTime"></SfCalendar>
    

  • (마지막으로 프로그램을 실행하면 웹 브라우저의 모든 프로그램 집합을 초기 불러오는 동안 불러옵니다. (지연 없이 불러옵니다.)

  • 응용 프로그램에서 지연 로드 구성


    이제 프로그램에서 프로그램 집합의 지연 불러오기를 설정합니다.절차는 다음과 같습니다.
  • *BlazorWebAssemblyLazyLoad* 태그 항목을 사용하여 프로젝트 파일(.csproj)에 필요한 SyncfusionBlazor 프로그램 집합과 의존 항목을 포함합니다.아래의 코드 예시를 참고하시오.
  • <ItemGroup>
        <BlazorWebAssemblyLazyLoad Include="Syncfusion.Blazor.Buttons.dll" />
        <BlazorWebAssemblyLazyLoad Include="Syncfusion.Blazor.Calendars.dll" />
        <BlazorWebAssemblyLazyLoad Include="Syncfusion.Blazor.Inputs.dll" />
        <BlazorWebAssemblyLazyLoad Include="Syncfusion.Blazor.Lists.dll" />
        <BlazorWebAssemblyLazyLoad Include="Syncfusion.Blazor.Data.dll" />
        <BlazorWebAssemblyLazyLoad Include="Syncfusion.Blazor.Spinner.dll" />
        <BlazorWebAssemblyLazyLoad Include="Syncfusion.Blazor.Popups.dll" />
        <BlazorWebAssemblyLazyLoad Include="Syncfusion.Blazor.SplitButtons.dll" />
    </ItemGroup>
    
    참고: **Syncfusion은 포함되지 않습니다.브라조.핵심과 융합.브라조.BlazorWebAssemblyLazyLoad 프로젝트의 테마 패키지입니다.이 패키지들은 응용 프로그램이 처음에 필요로 하는 일반적인 기능을 포함하고 있다.
  • ~/응용 프로그램을 엽니다.다음 코드와 같이 razor 파일에 *LazySassemblyLoader* 서비스를 주입합니다.
  • @using Microsoft.AspNetCore.Components.WebAssembly.Services
    
    @inject LazyAssemblyLoader assemblyLoader
    
  • 그리고 추가 프로그램 집합 **와 **OnNavigateAsync 방법을 공유기 구성 요소에 추가합니다.
  • 참고: **OnNavigateAsync는 사용자가 브라우저에서 직접 탐색하여 라우팅에 액세스하거나 NavigationManager.NavigateTo 방법을 사용하여 호출할 때 호출되는 콜백 함수입니다.이 콜백의 매개 변수는 내비게이션 경로를 포함합니다.
    다음 코드를 참조하십시오.
    @using System.Reflection;
    
    <Router AppAssembly="@typeof(Program).Assembly" PreferExactMatches="@true" AdditionalAssemblies="@lazyLoadedAssemblies" OnNavigateAsync="@OnNavigateAsync">
        ........
        ........
    </Router>
    
    @code {
        private List<Assembly> lazyLoadedAssemblies = new List<Assembly>();
    
        private async Task OnNavigateAsync(NavigationContext args)
        {
        }
    }
    
  • 현재 *OnNavigateAsync* 리셋의 루트 경로에 따라 로드 지연된 프로그램 집합을 AdditionalAssemblys 속성에 추가합니다.
  • *참고: * 현재 라우팅 경로에 사용되는 모든 중첩된 종속성 프로그램 세트와 해당 구성 요소 프로그램 세트를 추가합니다.
    아래의 코드 예시를 참고하시오.
    @code {
        private List<Assembly> lazyLoadedAssemblies = new List<Assembly>();
        private async Task OnNavigateAsync(NavigationContext args)
        {
            try
            {
                IEnumerable<Assembly> assemblies = null;
                switch (args.Path)
                {
                    case "button":
                        assemblies = await assemblyLoader.LoadAssembliesAsync(
                            new List<string>() {
                                "Syncfusion.Blazor.Buttons.dll"
                            });
                        break;
                    case "calendar":
                        assemblies = await assemblyLoader.LoadAssembliesAsync(
                            new List<string>() {
                                "Syncfusion.Blazor.Calendars.dll" ,
                                "Syncfusion.Blazor.Buttons.dll",
                                "Syncfusion.Blazor.Inputs.dll",
                                "Syncfusion.Blazor.Lists.dll",
                                "Syncfusion.Blazor.Data.dll",
                                "Syncfusion.Blazor.Spinner.dll",
                                "Syncfusion.Blazor.Popups.dll",
                                "Syncfusion.Blazor.SplitButtons.dll",
                            });
                        break;
                }
                if (assemblies != null)
                {
                    lazyLoadedAssemblies.AddRange(assemblies);
                }
            }
            catch (Exception ex)
            {
    
            }
    
  • 로드 지연 기능을 사용할 때 새 노선 내비게이션의 프로그램 집합 다운로드 시간은 몇 초가 걸릴 수 있다.다음 코드 예제에 표시된 것처럼 * 탐색 * 구성 요소를 사용하여 사용자 지정 메시지를 표시하고 (예: 요청한 페이지가 로드 중...) 메시지를 표시하여 사용자에게 알릴 수 있습니다.
  • @using Microsoft.AspNetCore.Components.Routing;
    
    <Router AppAssembly="@typeof(Program).Assembly" PreferExactMatches="@true" AdditionalAssemblies="@lazyLoadedAssemblies" OnNavigateAsync="@OnNavigateAsync">
        <Navigating>
            <div class="nav-banner">
                <p>The requested page is loading...</p>
            </div>
        </Navigating>
        ......
        ......
    </Router>
    
  • 다음 예제 코드는 사용자가 특정 라우팅 경로를 탐색할 때 Syncfusion Blazor 프로그램 세트를 동적으로 로드하는 것을 보여줍니다.
  • @using System.Reflection;
    @using Microsoft.AspNetCore.Components.Routing;
    @using Microsoft.AspNetCore.Components.WebAssembly.Services;
    
    @inject LazyAssemblyLoader assemblyLoader;
    
    <Router AppAssembly="@typeof(Program).Assembly" PreferExactMatches="@true" AdditionalAssemblies="@lazyLoadedAssemblies" OnNavigateAsync="@OnNavigateAsync">
        <Navigating>
            <div class="nav-banner">
                <p>The requested page is loading...</p>
            </div>
        </Navigating>
        ......
        ......
    </Router>
    
    @code {
        private List<Assembly> lazyLoadedAssemblies = new List<Assembly>();
        private async Task OnNavigateAsync(NavigationContext args)
        {
            try
            {
                IEnumerable<Assembly> assemblies = null;
                switch (args.Path)
                {
                    case "button":
                        assemblies = await assemblyLoader.LoadAssembliesAsync(
                            new List<string>() {
                                "Syncfusion.Blazor.Buttons.dll"
                                });
                        break;
                    case "calendar":
                        assemblies = await assemblyLoader.LoadAssembliesAsync(
                            new List<string>() {
                                "Syncfusion.Blazor.Calendars.dll" ,
                                "Syncfusion.Blazor.Buttons.dll",
                                "Syncfusion.Blazor.Inputs.dll",
                                "Syncfusion.Blazor.Lists.dll",
                                "Syncfusion.Blazor.Data.dll",
                                "Syncfusion.Blazor.Spinner.dll",
                                "Syncfusion.Blazor.Popups.dll",
                                "Syncfusion.Blazor.SplitButtons.dll",
                                });
                        break;
                }
                if (assemblies != null)
                {
                    lazyLoadedAssemblies.AddRange(assemblies);
                }
            }
            catch (Exception ex)
            {
    
            }
        }
    }
    
  • 마지막으로 프로그램을 실행하면 Syncfusion Blazor 프로그램 집합이 각종 루트 경로를 탐색할 때 불러오기를 지연합니다.다음 GIF 이미지를 참조하십시오.

    위의 GIF 이미지에서 볼 수 있는 내용은 다음과 같습니다.
  • 각종 배선 경로에서 내비게이션을 할 때 상응하는 부품 부품과 의존항만 탑재한다.
  • 부품의 종속 부품이 이전 경로에 로드된 경우 다시 로드되지 않습니다.
  • 같은 페이지로 다시 이동하면 캐시에서 프로그램 집합을 다시 사용해서 구성 요소를 보여 줍니다.
  • GitHub 참조


    GitHub 저장소에서 완전한 작업 예시를 얻을 수 있습니다.

    요약


    이 블로그에서 우리는 각각의 Syncfusion Blazor NuGet 패키지를 사용하여 Blazor Web Assembly 응용 프로그램을 만드는 과정과 프로그램 집합의 불러오기 지연 과정을 소개했다.Syncfusion Blazor NuGet 패키지 및 프로그램 세트 이름에 대해서는 이 설명서documentation를 참조하십시오.이 기능은 2020 Volume 4 release에서 사용할 수 있습니다.
    본 블로그에서 토론하는 절차를 시도하고 아래의 평론 부분에서 피드백을 공유합니다!
    저희support forums, Direct-Trac 또는 feedback portal로 연락 주십시오.우리는 언제든지 기꺼이 당신을 돕겠습니다!

    좋은 웹페이지 즐겨찾기