首页 > 其他分享 >Blazor WebAssembly的初次访问慢的优化

Blazor WebAssembly的初次访问慢的优化

时间:2023-01-11 20:22:21浏览次数:80  
标签:WebAssembly const nginx 压缩 application 初次 gzip Blazor

Blazor WebAssembly初次访问需要加载很多dll,体积较大,因此第一次加载比较慢。

针对此问题Microsoft提供了优化方案:压缩

https://learn.microsoft.com/zh-cn/aspnet/core/blazor/host-and-deploy/webassembly?view=aspnetcore-6.0#compression-1

gzip压缩

首先通过nginx开启gzip压缩,配置如下

http
    {
     ...
       #是否启动gzip压缩,on代表启动,off代表开启
        gzip on;
       #如果文件大于1k就启动压缩
        gzip_min_length  1k;
       #以16k为单位,按照原始数据的大小以4倍的方式申请内存空间,一般此项不要修改
        gzip_buffers     4 16k;
        gzip_http_version 1.1;
       #压缩的等级,数字选择范围是1-9,数字越小压缩的速度越快,消耗cpu就越大
        gzip_comp_level 2;
       #需要压缩的常见静态资源
        gzip_types     text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/octet-stream;
        gzip_vary on;
        gzip_proxied   expired no-cache no-store private auth;
       #由于nginx的压缩发生在浏览器端而微软的ie6很坑爹,会导致压缩后图片看不见所以该选项是禁止ie6发生压缩
        gzip_disable   "MSIE [1-6]\.";
    ...
    }

 

重启nginx

#用来测试配置文件
nginx -t
  
nginx -s reload

 

Brotli压缩

发布 Blazor WebAssembly 应用时,将在发布过程中对输出内容进行静态压缩,从而减小应用的大小,并免去运行时压缩的开销。 使用Brotli压缩算法。

Blazor 依赖于主机提供适当的压缩文件。 使用 ASP.NET Core 托管项目时,主机项目能够执行内容协商并提供静态压缩文件。 托管 Blazor WebAssembly 独立应用时,可能需要额外的工作来确保提供静态压缩文件。

首先在 wwwroot/index.html 文件中,在 Blazor 的 <script> 标记上将 autostart 设置为 false:

<script src="_framework/blazor.webassembly.js" autostart="false"></script>

在 Blazor 的 <script> 标记之后和结束 </body> 标记之前,添加以下 JavaScript 代码 <script> 块:

<script type="module">
  import { BrotliDecode } from './decode.min.js';
  Blazor.start({
    loadBootResource: function (type, name, defaultUri, integrity) {
      if (type !== 'dotnetjs' && location.hostname !== 'localhost') {
        return (async function () {
          const response = await fetch(defaultUri + '.br', { cache: 'no-cache' });
          if (!response.ok) {
            throw new Error(response.statusText);
          }
          const originalResponseBuffer = await response.arrayBuffer();
          const originalResponseArray = new Int8Array(originalResponseBuffer);
          const decompressedResponseArray = BrotliDecode(originalResponseArray);
          const contentType = type === 
            'dotnetwasm' ? 'application/wasm' : 'application/octet-stream';
          return new Response(decompressedResponseArray, 
            { headers: { 'content-type': contentType } });
        })();
      }
    }
  });
</script>

 

 重新访问,即可看到访问速度的提升十分显著。

标签:WebAssembly,const,nginx,压缩,application,初次,gzip,Blazor
From: https://www.cnblogs.com/chenyishi/p/17039437.html

相关文章

  • 10分钟做好 Bootstrap Blazor 的表格组件导出 Excel/Word/Html/Pdf
    上篇:BootstrapBlazor实战通用导入导出服务(Table组件)1.新建工程新建工程b14tabledotnetnewblazorserver-ob14table将项目添加到解决方案中:dotnetslnadd......
  • Maui 读取外部文件显示到Blazor中
    Maui读取外部文件显示到Blazor中首先在mauiblazor中无法直接读取外部文件显示,但是可以通过base64去显示但是由于base64太长可能影响界面卡顿这个时候我们可以使用bl......
  • 学习.NET MAUI Blazor(五)、修改Window窗口标题
    由于Blazor属于SPA(single-pageapplication),所以页面标题需要使用PageTitle组件来实现。但是在MAUIBlazor中,Blazor所在的位置是WebView,而标题是属于window。所以在MAUIBla......
  • 学习ASP.NET Core Blazor编程系列二十——文件上传(完)
    学习ASP.NETCoreBlazor编程系列文章之目录学习ASP.NETCoreBlazor编程系列一——综述学习ASP.NETCoreBlazor编程系列二——第一个Blazor应用程序(上)学习A......
  • WebAssembly 语言支持
    对WebAssembly(和WASI)的支持在所有主要编程语言中都取得了很好的进展。评估一种语言对WebAssembly/WASI的支持程度很重要,因为它可以让我们了解wasmtime和Enarx的可......
  • 2023 年 WebAssembly 前景预测
    关于WebAssembly(通常简称为Wasm)及其在云计算领域的未来。对于那些只了解Wasm最初形式(浏览器技术)或第二个主要用例(游戏技术)的人来说,这可能会让他们感到惊讶。这两种用......
  • Blazor与Vue标签代码的可维护性对比
    通过一个简单示例来进行对比,Vue的ElementUI组件的行内编辑:Blazor的AntDesginBlazor组件的行内编辑:区别:el-table-column的label属性相当于Column的Title属性,这个是没......
  • Blazor实现菜单动画
    想到动画,你可能会去安装Blazor的动画组件BlazorAnimate,然后使用它。本人初学,暂时我也不知道原理,先不用组件,自己实现吧。虽然项目中我用了AntDesignBlazor,但是我忘了使用它......
  • 学习.NET MAUI Blazor(四)、路由
    Web应用程序的可以通过URL将多个页面串联起来,并且可以互相跳转。Web应用主要是使用a标签或者是服务端redirect来跳转。而现在流行的单页应用程序(SPA),则通过路由(Router)来......
  • Python Kconfiglib初次学习
    1参考kconfiglib库官方介绍:kconfiglib·PyPIKconfiglib源码:GitHub-ulfalizer/Kconfiglib:AflexiblePython2/3KconfigimplementationandlibraryKconfig语法......