You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提升部署在Ubuntu 20.04 VPS上的Blazor Server应用性能?

优化Blazor Server在Ubuntu VPS上的性能方案

针对你遇到的Blazor Server部署后响应缓慢、页面导航重加载的问题,可从以下几个方向排查优化:

1. 排查服务器资源瓶颈

  • 实时监控CPU、内存、磁盘IO状态:使用htop、iostat命令查看,确认Blazor应用进程(dotnet)是否存在内存占用过高、CPU持续满载的情况。2GB内存的VPS若同时运行多个应用,需确保Blazor进程有足够内存分配,避免因内存不足触发GC频繁回收导致卡顿。
  • 检查.NET进程健康:通过dotnet-counters monitor --process-id <PID>查看进程的GC频率、内存分配情况,排查是否存在内存泄漏。

2. 确认Azure SignalR服务是否真正生效

  • 验证SignalR连接端点:打开浏览器开发者工具(F12),查看Network面板中SignalR的连接请求,确认请求地址是否指向Azure SignalR的服务端点,而非本地服务器地址。若仍使用本地端点,说明配置未生效。
  • 检查Program.cs/Startup.cs配置:确保已正确添加Azure SignalR服务,示例配置如下:
    builder.Services.AddSignalR().AddAzureSignalR("<你的Azure SignalR连接字符串>");
    
  • 确认Nginx支持WebSocket转发:Blazor Server依赖WebSocket维持长连接,需在Nginx配置中添加WebSocket支持:
    location / {
        proxy_pass http://localhost:5000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        # 延长超时时间,避免长连接被强制断开
        proxy_connect_timeout 7d;
        proxy_send_timeout 7d;
        proxy_read_timeout 7d;
    }
    

3. 优化Blazor应用运行时配置

  • 启用预渲染:通过预渲染减少首次页面加载时间,避免导航时的整页刷新。在_Host.cshtml中启用预渲染:
    <component type="typeof(App)" render-mode="ServerPrerendered" />
    
  • 控制组件渲染频率:避免不必要的StateHasChanged()调用,重写ShouldRender()方法过滤无效渲染:
    protected override bool ShouldRender()
    {
        // 仅当必要状态变化时渲染
        return _hasStateChanged;
    }
    
  • 优化JS互操作:你的延迟测试显示JS互操作耗时300+ms,需减少频繁的JS调用,尽量批量处理操作。例如将多次小的JS调用合并为一次,或使用IJSRuntime.InvokeAsync的异步特性避免阻塞主线程。

4. 优化Nginx与静态资源缓存

  • 启用Gzip压缩:减少静态资源(CSS、JS、图片)的传输大小,在Nginx配置中添加:
    gzip on;
    gzip_vary on;
    gzip_min_length 1024;
    gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml+rss application/javascript application/json;
    
  • 配置静态资源缓存:对Blazor的静态文件设置长期缓存,减少重复请求:
    location /_framework {
        proxy_pass http://localhost:5000;
        expires 1y;
        add_header Cache-Control "public, immutable";
    }
    

5. 代码与发布优化

  • 修复页面导航重加载问题:确保使用Blazor的<NavLink>组件而非原生<a>标签,避免触发整页刷新。检查路由配置是否正确,确保所有Blazor路由由服务器端的Blazor中间件处理。
  • 减少组件初始化开销:优化OnInitializedAsync中的逻辑,避免在初始化时执行大量同步或慢查询,可使用内存缓存(如IMemoryCache)缓存频繁查询的结果。
  • 启用编译优化:发布应用时启用Tiered Compilation和ReadyToRun,提升运行时性能。在项目csproj中添加:
    <PropertyGroup>
      <TieredCompilation>true</TieredCompilation>
      <ReadyToRun>true</ReadyToRun>
    </PropertyGroup>
    

6. 其他排查点

  • 检查.NET版本:确保使用.NET 6的最新补丁版本,旧版本可能存在性能缺陷。
  • 测试网络延迟:通过ping、traceroute测试本地到VPS的网络延迟,若网络本身延迟过高,可考虑更换VPS服务商或使用CDN加速静态资源。

内容的提问来源于stack exchange,提问作者Mahmudul Hasan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 04:40:29