文章目录

  • 一、WebApi调优
  • 二、WebApi 应用场景
  • 三、WebApi 性能瓶颈定位
  • 四、WebApi性能优化手段一-本地缓存
  • 五、WebApi 性能优化手段二-分布式缓存
  • 六、WebApi 性能优化手段三-Http缓存(响应缓存)
  • 七、WebApi 性能优化手段四-数据压缩(响应)

一、WebApi调优

  • 什么是WebApi调优

    当浏览器端请求WebApi服务端读写数据需要耗费时间,将耗费的时间缩短,就称之为WebApi调优。

    如图:

  • 目的
    提升WebApi的性能。

二、WebApi 应用场景

  • 场景

    前后端分离的项目。

三、WebApi 性能瓶颈定位

  • 定位性能瓶颈

    请看NetCore性能排查文章:https://blog.csdn.net/Fu_Shi_rong/article/details/123733415?spm=1001.2014.3001.5501

四、WebApi性能优化手段一-本地缓存

  • 单体项目

    如图:

  • 实现

    • 设计思路

      查询使用时先看本地缓存有无数据,有数据直接返回,无数据时到数据库查询,将查询到的数据添加到本地缓存中并将数据返回给浏览器端

    • 优点与缺点

      • 缺点

        Memory是服务器内存中的缓存,如果并发量大并查询的数据又不一致,会造成内存非常的大 ,同时会造成GC不断地回收这个内存,由于Memory 内部使用的静态变量造成内存无法回收,GC每回收一次,就会消耗一次CPU资源,如果GC回收的频率比较大,那消耗的CPU资源也会变大,例如:现在的CPU的使用率为100%,GC消耗了70%CPU资源,那我们的吞吐量只有30%,那处理请求的性能大幅度的下降。

        • 解决方案

          1. 用时间换空间的方法来解决,给缓存设置时间。
          2. 设置缓存大小
          3. 设置单个缓存大小,并设置自动失效时间
      • 优点

        数据读写速度时间缩短,性能得到提升。

  • 实现步骤

    • 安装缓存Nuget包

      Microsoft.Extensions.Caching.Memory
      
    • Startup注册

      ConfigureServices方法中注册缓存服务
      Service.AddMemoryCache(options=>{options.SizeLimit = 1024*1024*100; //设置缓存大小
      });
      
    • 在使用的场景进行注入

      在构造方法中注入private readonly IMemoryCache memoryCache;构造函数  (IMemoryCache _memoryCache)
      {memoryCache =_memoryCache;
      }
      //测试对象 Person per = new Person();
      //查询缓存方法
      //memoryCache.Get<Person>(key);
      //为了放防止多线程并发
      bool flag = memoryCache.TryGetValue<缓存对象>(key,out per);
      //true:有数据  false:无数据
      //限制缓存大小
      var  cacheEntryOptions = new MemoryCacheEntryOptions().
      //设置单个缓存大下
      SetSize(1024).
      //设置过期时间  自动失效
      SetSlidingExpiration(TimeSpan.FromSeconds(3));
      //添加缓存
      memoryCache.Set<Person>(key,value,cacheEntryOptions);
      
  • 解决第一次请求耗时解决方案

    将项目启动的时候,将数据库中的数据添加到缓存中

    • 代码实现

      //类继承 IHostService
      //并在Startup类中注册
      

五、WebApi 性能优化手段二-分布式缓存

  • 方案

    • 请看这篇文章。https://blog.csdn.net/Fu_Shi_rong/article/details/123930343?spm=1001.2014.3001.5501

六、WebApi 性能优化手段三-Http缓存(响应缓存)

  • 方案

    • 协商缓存

      • 安装Nuget包

        Marvin.Cache.Headers
        
      • 在Startup类中只注册

        ConfigureServices方法中注册
        Service.AddHttpCacheHeaders((options)=>{options.MaxAge = ....;//设置过期时间  默认60soptions.CacheLocation = ....;//public  公共的  private  私有的只能当前客户端使用options.NoStore= ...;//  设置响应头信息   不走本地缓存options.NoTransform= ....;//设置请求头信息 },(options1)=>{});
        Configure方法中启动并存储校验信息
        app.UseHttpCacheHeaders();
        
      • 控制器方法中添加代码

        HttpContext.Response.Headers.Add("cache-control","max-age=60,public"); //是否开启缓存储数据  设置缓存时间
        HttpContext.Response.Headers.Add("etag",Value);//校验
        HttpContext.Response.Headers.Add("last-modified","Mon,24 Dec 2022 09:49:49 GMT");
        
      • 原理

        当客户端第一次请求服务器,服务器响应后,服务器会往响应头里写入两个参数 【1、是否开启缓存存储数据2、校验】并存储到客户端,客户端会将数据存储到缓存仓库中;当客户端第二次请求到服务器,会将etag传到服务器进行校验,如果两个etag是相等的,服务端会返给客户端304,客户端会从缓存仓库中获取数据。

      • 场景

        不可变的数据使用。

      • 缺陷

        会浪费大量客户端和服务器进行交互。

  • 强制缓存 [不常用]

    • 步骤

      • 安装Nuget包

        Marvin.Cache.Headers
        
      • 在Startup类ConfigureServices方法中注册

        ConfigureServices方法中注册
        Service.AddHttpCacheHeaders((options)=>{options.MustRevalidate = true;  //全局的方式  不建议使用
        });
        Configure方法中启动并存储校验信息
        app.UseHttpCacheHeaders();
        
      • 控制器方法中添加代码

        HttpContext.Response.Headers.Add("cache-control","max-age=60,public,must-revalidate");
        
      • 针对某个控制器使用

        //在控制器方法上添加特性
        [HttpCacheExpiration(CacheLocation = CacheLocation.Public,MaxAge=60)]  设置NoStore = true  不走缓存
        [HttpCacheValidation(MustRevalidate = true)]
        
    • 场景

      1. 字典数据
      2. 静态资源 图片等
      3. js或css文件​

七、WebApi 性能优化手段四-数据压缩(响应)

  • 步骤

    • 在Startup类ConfigureServices方法中注册

      //响应数据压缩
      services.AddResponseCompression();
      
    • 在Startup类Configure方法中开启服务

      //必须写在中间件的开头
      app.UseResponseCompression();
      
  • 数据压缩的目的

    数据传输的时候,减少传输的带宽,提升性能。

  • 场景

    只要涉及到数据传输都可以用数据压缩。

WebApi性能优化相关推荐

  1. WebAPI性能优化之压缩解压

    有时候为了提升WebAPI的性能,减少响应时间,我们会使用压缩和解压,而现在大多数客户端浏览器都提供了内置的解压支持.在WebAPI请求的资源越大时,使用压缩对性能提升的效果越明显,而当请求的资源很小 ...

  2. EntityFramework Core不得不注意的性能优化意外收获,你会用错?

    前言 这两天在着实研究EF Core项目当中对于一些查询也没实际去检测,于是想着利用放假时间去实际测试下,结果本文就出来了,too young,too simple,后续博主会从底层翻译表达式树弄起, ...

  3. kali2020进入单模式_蚂蚁集团技术专家山丘:性能优化的常见模式及趋势

    陈显铭(山丘) 读完需要 6分钟 速读仅需 2 分钟 陈显铭,花名山丘,就职于蚂蚁集团,对分布式应用架构.服务化.性能优化等有深入的理解.参与支付宝支付链路核心系统,设计.调优应用系统关键能力, 高效 ...

  4. MegEngine推理性能优化

    MegEngine推理性能优化 MegEngine「训练推理一体化」的独特范式,通过静态图优化保证模型精度与训练时一致,无缝导入推理侧,再借助工业验证的高效卷积优化技术,打造深度学习推理侧极致加速方案 ...

  5. asp.net程序性能优化的七个方面

    asp.net程序性能优化的七个方面 一.数据库操作 1.用完马上关闭数据库连接 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器 ...

  6. java criteria限制条数_java架构—Oracle SQL性能优化

    (1) 选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先 ...

  7. ab测试nginx Nginx性能优化

    转自:https://www.cnblogs.com/nulige/p/9369700.html 1.性能优化概述 在做性能优化前, 我们需要对如下进行考虑 1.当前系统结构瓶颈 观察指标 压力测试 ...

  8. RHEL/CentOS通用性能优化、安全配置参考

    RHEL/CentOS通用性能优化.安全配置参考 本文的配置参数是笔者在实际生产环境中反复实践总结的结果,完全适用绝大多数通用的高负载.安全性要求的网络服务器环境.故可以放心使用. 若有异议,欢迎联系 ...

  9. Android开发——布局性能优化的一些技巧(一)

    0. 前言 上一篇我们分析了为什么LinearLayout会比RelativeLayout性能更高,意义在于分析了这两种布局的实现源码,算是对一个小结论的证明过程,但是对布局性能的优化效果,对这两种布 ...

最新文章

  1. 1.3 图像边缘检测edge函数的用法
  2. [JZOJ P1311] [DP]邮局设置问题
  3. 【QuotationTool】主要数据结构
  4. C语言之函数指针和函数的首地址
  5. 美式期权定价python_【定价】二叉树(CRR)欧式/美式期权定价的原理及Python实现...
  6. oracle存储格式化时间,ORACLE日期时间的格式化参数大全
  7. Numpy的学习6-深浅赋值(copydeep copy)
  8. layui表格取消横向滚动条_layui表格固定表头统一处理方案
  9. 丢弃法(基于MXNet)
  10. google三件套是什么_什么是Google?
  11. redis 菜鸟教程
  12. “打砖块”H5游戏源码
  13. 【智能车学习】FTM模块
  14. 名字空间的含义及作用
  15. 分块算法板子luogu1903
  16. Android 来电秀总结
  17. visual Studio Code(VS code)软件中HTML超级好用的一个插件 liveserver,vs code浏览网页
  18. ethereum-etl学习3
  19. 郁闷的打包和诺基亚模拟器
  20. python边玩边学_边干边学:协程—在Android中使用协程进行改装请求的指南

热门文章

  1. OPPO A59st怎么刷机 OPPO A59st的刷机教程 OPPO A59st完美解除账号锁
  2. 【Pytorch基础教程31】YoutubeDNN模型解析
  3. 520送什么礼物给男朋友比较好?男生最想收到的礼物清单
  4. linux lamp的配置
  5. CSS文本与字体知识梳理
  6. 浅谈框架与架构的区别
  7. whileuntil循环详解
  8. java基础—java内存模型(JMM)CPU架构、缓存一致性、重排序、JMM的实现、JMM保证可见性、有序性问题的详解
  9. 每日一练 | 20道常考Python面试题大总结
  10. 关于jsp和html文件的缓存问题