当前位置: 首页 > news >正文

ASP.NET Core 性能优化:客户端响应缓存

文章目录

  • 前言
  • 一、什么是缓存
  • 二、客户端缓存
    • 核心机制:HTTP缓存头
    • 1)使用[ResponseCache]属性(推荐)
    • 2)预定义缓存配置(CacheProfile)
    • 3)手动设置HTTP头
    • 4)缓存验证机制(条件请求)
  • 三、最佳实践与注意事项
    • 适用场景
    • 避免的陷阱
  • 总结


前言

在 .NET Core 中,缓存是性能优化的重要手段之一。

一、什么是缓存

缓存(Caching)是提升应用性能的关键技术,通过存储频繁访问的数据来减少计算和数据库压力。
数据库中的索引等简单有效的优化功能本质上都是缓存。

二、客户端缓存

客户端Cache-Control:核心指令,定义缓存策略:响应缓存是通过HTTP响应头(如Cache-Control、Expires)告知浏览器或其他客户端缓存资源的机制。它允许客户端(如浏览器)在本地存储资源副本,减少对服务器的重复请求。

核心机制:HTTP缓存头

客户端缓存通过以下HTTP头控制:

  • Cache-Control:核心指令,定义缓存策略:
    • public:允许代理和客户端缓存资源
    • private:仅允许客户端(浏览器)缓存
    • max-age=<seconds>:资源有效期(如max-age=3600表示1小时)
    • no-cache:每次需向服务器验证资源是否过期(使用ETag或Last-Modified)
    • no-store:禁止缓存(如敏感数据)
  • Expires:指定资源过期的绝对时间(HTTP/1.0遗留,优先级低于Cache-Control
  • ETag/Last-Modified:验证缓存有效性(服务端返回资源标识,客户端后续请求
    携带If-None-MatchIf-Modified-Since验证)

1)使用[ResponseCache]属性(推荐)

  1. 在控制器或Action方法上标记,自动生成缓存头
    [HttpGet]
    [ResponseCache(Duration = 60, Location = ResponseCacheLocation.Client)]
    public ActionResult<DateTime> GetNowTime()
    {return DateTime.Now;//var product = _db.Products.Find(id);//return product ;
    }
    
  2. 参数说明
    Duration:缓存时间()。
    Location:缓存位置(ClientAny)。

2)预定义缓存配置(CacheProfile)

  1. Program.cs中定义全局缓存模板,避免重复配置:
    builder.Services.AddControllers(options =>
    {options.CacheProfiles.Add("DefaultClientCache", new CacheProfile{Duration = 20,          // 20秒Location = ResponseCacheLocation.Client,VaryByHeader = "User-Agent"});
    });
    
  2. Controller中引用
    [ResponseCache(CacheProfileName = "DefaultClientCache")]
    [HttpGet]
    public ActionResult<DateTime> GetNowTime()
    {return DateTime.Now;
    }
    
  3. 参数说明
    Location:缓存位置(ClientAny)。
    VaryByHeader:根据请求头区分缓存版本(如User-Agent)。
    CacheProfileName:引用预定义的缓存配置。

3)手动设置HTTP头

  1. 直接操作HttpContext.Response.Headers
    [HttpGet]
    public ActionResult<DateTime> GetNowTime()
    {Response.Headers.CacheControl = new[] { "public", "max-age=20" }; // 缓存20秒return DateTime.Now;
    }
    

4)缓存验证机制(条件请求)

  1. 结合ETagLast-Modified实现高效缓存验证
    [HttpGet]
    public ActionResult<DateTime> GetNowTime()
    {//Response.Headers.CacheControl = new[] { "public", "max-age=20" }; // 缓存20秒var etag = Guid.NewGuid().ToString(); // 根据内容生成唯一标识// 检查客户端是否已有最新版本if (Request.Headers.IfNoneMatch == etag){return StatusCode(304); // 304 Not Modified}Response.Headers.ETag = etag;Response.Headers.CacheControl = "public, max-age=5";return DateTime.Now;
    }
    

三、最佳实践与注意事项

适用场景

  • 静态资源:如图片、CSS、JS文件(设置长缓存max-age=31536000)。
  • 低频变化的动态数据:如用户公共资料、商品分类。
  • 带宽敏感场景:减少重复传输大型资源。

避免的陷阱

  1. 过度缓存动态数据:导致用户看到过期信息(如实时股价)
    方案:使用no-cache或短max-age,结合ETag验证。

  2. 忽略缓存版本控制:文件更新后客户端未刷新。
    方案:为静态资源文件名添加哈希(如app-{hash}.js)。

  3. 未处理Vary头:不同设备/语言返回相同缓存。
    方案:设置VaryByHeaderVaryByQueryKeys


总结

  • 通过合理配置客户端响应缓存,可显著减少服务器负载并提升用户体验。关键点包括:
    • 使用[ResponseCache]属性或手动设置Cache-Control头部。
    • 结合ETagLast-Modified实现条件请求。
    • 避免对高频变化数据过度缓存,并通过Vary头处理多版本资源。
    • 利用浏览器工具和性能监控持续优化缓存策略。

相关文章:

ASP.NET Core 性能优化:客户端响应缓存

文章目录 前言一、什么是缓存二、客户端缓存核心机制&#xff1a;HTTP缓存头1&#xff09;使用[ResponseCache]属性&#xff08;推荐&#xff09;2&#xff09;预定义缓存配置&#xff08;CacheProfile&#xff09;3&#xff09;手动设置HTTP头4&#xff09;缓存验证机制&#…...

算法导论(递归回溯)——递归

算法思路&#xff08;21&#xff09; 递归函数的含义&#xff1a; 创建一个递归函数&#xff0c;该函数接受两个链表的头结点作为输入&#xff0c;返回合并后的链表的头结点。 选择较小的节点&#xff1a; 在函数体内&#xff0c;首先比较两个链表的头结点的值&#xff0c;选择…...

从接口400ms到20ms,记录一次JVM、MySQL、Redis的混合双打

​​1. 场景&#xff1a;促销活动的崩溃​​ 接到报警短信&#xff0c;核心接口响应时间突破​​5秒​​&#xff0c;DB CPU飙到100%。 用Arthas抓取线上火焰图后发现&#xff1a; ---[ 4763ms ] com.example.service.OrderService.createOrder() |---[ 98% ] com.example.m…...

Excel通过VBA脚本去除重复数据行并保存

一、方法1:使用字典动态去重并保存 适用场景&#xff1a;需要灵活控制去重逻辑&#xff08;如保留最后一次出现的重复项&#xff09;时 Sub 动态去重保存到新表()Dim srcSheet As Worksheet, destSheet As WorksheetDim dict As Object, lastRow As Long, i As LongDim key A…...

Mysql表的操作(2)

1.去重 select distinct 列名 from 表名 2.查询时排序 select 列名 from 表名 order by 列名 asc/desc; 不影响数据库里面的数据 错误样例 &#xff1a; 但结果却有点出乎意料了~为什么会失败呢&#xff1f; 其实这是因为书写的形式不对&#xff0c;如果带了引号&#xff0c;…...

#Linux内存管理# 在ARM32系统中,页表是如何映射的?在ARM64系统中,页表又是如何映射的?

一、ARM32系统页表映射 1. 层级结构与地址划分 默认实现&#xff1a;采用两层映射&#xff08;PGD→PTE&#xff09;&#xff0c;合并Linux标准三级模型中的PMD层。 虚拟地址解析&#xff08;以4KB页为例&#xff09;&#xff1a; Bits[31:20]&#xff1a;一级页表&#xff08;…...

prometheus整合jmx_exporter 使用jmx_exporter监控Kafka

docker-compose部署kafka集群&#xff1b;单节点单zk-CSDN博客 springboot整合kafka&#xff1b;docker部署kafka-CSDN博客 kafka使用SSL加密和认证--todo_ssl.truststore.location-CSDN博客 version: 3.8services:zookeeper1:image: zookeeper:3.9.1container_name: zook…...

深度学习实战:从零构建图像分类API(Flask/FastAPI版)

引言&#xff1a;AI时代的图像分类需求 在智能时代&#xff0c;图像分类技术已渗透到医疗影像分析、自动驾驶、工业质检等各个领域。作为开发者&#xff0c;掌握如何将深度学习模型封装为API服务&#xff0c;是实现技术落地的关键一步。本文将手把手教你使用Python生态中的Fla…...

Kafka实现延迟消息

Kafka 实现延迟消息 Kafka 本身不支持原生的延迟消息&#xff08;不像 RocketMQ 内置了延迟队列&#xff09;&#xff0c;但可以通过多种方式来实现延迟消息。常见的方案如下&#xff1a; 1. 使用不同的 Topic 分区&#xff08;最常见&#xff09; 思路&#xff1a; 创建多…...

大数据(7.2)Kafka万亿级数据洪流下的架构优化实战:从参数调优到集群治理

目录 一、海量数据场景下的性能之殇1.1 互联网企业的数据增长曲线1.2 典型性能瓶颈分析 二、生产者端极致优化2.1 批量发送黄金法则2.1.1 分区选择算法对比 2.2 序列化性能突破 三、消费者端并发艺术3.1 多线程消费模式演进3.1.1 消费组Rebalance优化 3.2 位移管理高阶技巧 四、…...

要查看 FAISS 使用的 OpenMP 版本,需根据安装方式和系统环境采用不同方法。以下是具体步骤和原理分析:

要查看 FAISS 使用的 OpenMP 版本&#xff0c;需根据安装方式和系统环境采用不同方法。以下是具体步骤和原理分析&#xff1a; 方法 1&#xff1a;通过库文件名称直接查看&#xff08;推荐&#xff09; FAISS 的 OpenMP 版本通常直接体现在其依赖的动态链接库&#xff08;DLL/…...

AI 大模型的标准化工具箱MCP (Model Context Protocol)

MCP简介 MCP &#xff08;Model Context Protocol&#xff0c;模型上下文协议&#xff09;定义了应用程序和 AI 模型之间交换上下文信息的方式。这使得开发者能够以一致的方式将各种数据源、工具和功能连接到 AI 模型&#xff08;一个中间协议层&#xff09;&#xff0c;就像 …...

哈希表的封装

目录 引入 哈希表封装 修改哈希表参数 修改哈希表成员 修改%时使用的变量 修改读取时获得的变量 迭代器的实现 迭代器的定义 迭代器 迭代器*解引用 迭代器->成员访问 迭代器重载和! 封装迭代器 HashTable迭代器封装 非const版本 const版本 unordered_set迭…...

2025年认证杯数模竞赛赛题浅析-快速选题

赛题浅析 认证杯作为国内最早的数学建模论坛、唯一一个全部公开参赛论文的竞赛、国内最大的数学建模竞赛之一、唯一一个对非学生群里开放的数学建模竞赛、国内唯二的支持高中生参赛的大学生数模竞赛。在数模界一直被视为国赛之前较好的练手赛&#xff0c;本文将初步简略得介绍…...

【网络安全】Linux 常见命令

未经许可,不得转载。 文章目录 正文系统信息查看用户与权限管理进程管理网络配置与检测文件操作日志查看与分析权限审计与安全检测正文 在网络安全工作中,熟练掌握 Linux 系统中的常用命令,对于日常运维、日志分析、安全排查等工作至关重要。 以下为常用命令汇总,供参考。…...

电脑卡顿严重怎么办 电脑卡顿的处理指南

电脑突然卡顿比较严重&#xff0c;这是很多用户都曾经遇到过的问题&#xff0c;鼠标一直转圈圈&#xff0c;无法进行任何操作。电脑卡顿&#xff0c;电脑卡顿不仅会降低工作效率&#xff0c;还可能导致数据丢失&#xff0c;数据无法保存。很多用户解决电脑卡顿的方法就是直接一…...

山东大学软件学院创新项目实训开发日志(9)之测试前后端连接

在正式开始前后端功能开发前&#xff0c;在队友的帮助下&#xff0c;成功完成了前后端测试连接&#xff1a; 首先在后端编写一个测试相应程序&#xff1a; 然后在前端创建vue 并且在index.js中添加一下元素&#xff1a; 然后进行测试&#xff0c;测试成功&#xff1a; 后续可…...

H.264 NVMPI解码性能优化策略

H.264 NVMPI解码性能优化策略‌ ‌1. 硬件与驱动配置‌ ‌JetPack版本匹配‌&#xff1a;确保NVIDIA Jetson设备的JetPack SDK版本与CUDA驱动兼容&#xff0c;避免因驱动不匹配导致硬件解码性能下降‌8。‌显存分配优化‌&#xff1a;调整FFmpeg的-hwaccel_device参数指定GPU…...

汽车软件开发常用的需求管理工具汇总

目录 往期推荐 DOORS&#xff08;IBM &#xff09; 行业应用企业&#xff1a; 应用背景&#xff1a; 主要特点&#xff1a; Polarion ALM&#xff08;Siemens&#xff09; 行业应用企业&#xff1a; 应用背景&#xff1a; 主要特点&#xff1a; Codebeamer ALM&#x…...

如何从零构建一个自己的 CentOS 基础镜像

如何从零构建一个自己的 CentOS 基础镜像 从零构建一个基于 CentOS 的基础镜像是一个很好的实践&#xff0c;可以帮助你理解 Docker 镜像的底层原理。以下是以 CentOS 为例&#xff0c;从零开始&#xff08;不依赖现有镜像&#xff09;构建基础镜像的详细步骤。我们将使用 yum…...

mongodb和clickhouse比较

好问题——MongoDB 也能处理这种高写入 定期删除的时间序列场景&#xff0c;尤其从 MongoDB 5.0 开始支持了专门的 Time Series Collections&#xff08;时间序列集合&#xff09;&#xff0c;对你的需求其实挺对口的。 不过它有些优点和局限&#xff0c;需要具体分析下你场景…...

C#容器源码分析 --- List

List是一个非常常用的泛型集合类&#xff0c;它位于 System.Collections.Generic 命名空间下&#xff0c;本质上是一个动态数组&#xff0c;它提供了一系列方便的方法来管理和操作元素&#xff0c;例如添加、删除、查找等。与传统的数组相比&#xff0c;List可以根据需要动态调…...

以太坊区块大小的决定因素:深入解析区块 Gas 限制及其影响

以太坊&#xff08;Ethereum&#xff09;作为全球领先的区块链平台&#xff0c;其区块大小并非固定的物理尺寸&#xff0c;而是由区块 Gas 限制&#xff08;Block Gas Limit&#xff09;所决定。​理解区块 Gas 限制及其影响因素&#xff0c;对于深入掌握以太坊网络的运行机制至…...

利用DeepFlow解决APISIX故障诊断中的方向偏差问题

概要&#xff1a;随着APISIX作为IT应用系统入口的普及&#xff0c;其故障定位能力的不足导致了在业务故障诊断中&#xff0c;APISIX常常成为首要的“嫌疑对象”。这不仅导致了“兴师动众”式的资源投入&#xff0c;还可能使诊断方向“背道而驰”&#xff0c;从而导致业务故障“…...

智慧养老实训基地建设方案:如何以科技赋能养老实操培训

在人口老龄化加剧的当下&#xff0c;智慧养老产业蓬勃发展&#xff0c;对专业技能型人才的需求愈发迫切。智慧养老实训基地建设意义非凡&#xff0c;它为培育具备实操能力与创新思维的养老人才搭建关键平台&#xff0c;有助于填补行业人才缺口&#xff0c;推动养老服务从传统模…...

基于AI的Web应用防火墙(AppWall)实战:漏洞拦截与威胁情报集成

摘要&#xff1a;针对Web应用面临的OWASP、CVE等漏洞攻击&#xff0c;本文结合群联AI云防护系统的AppWall模块&#xff0c;详解AI规则双引擎的防御原理&#xff0c;并提供漏洞拦截配置与威胁情报集成代码示例。 一、Web应用安全挑战与AppWall优势 传统WAF依赖规则库更新滞后&a…...

什么是采购管理?如何做好采购管理的持续优化?

你是不是也遇到过这种情况&#xff1a; 公司采购部刚换了新供应商&#xff0c;结果原材料质量忽高忽低&#xff0c;生产线上三天两头出状况&#xff1b;行政采购的办公用品&#xff0c;月初买回来月底就堆在仓库吃灰&#xff1b;财务部天天追着问采购成本怎么又超支了... 这些…...

Unity 设置弹窗Tips位置

根据鼠标位于屏幕的区域&#xff0c;设置弹窗锚点以及位置 public static void TipsPos(Transform tf) {//获取ui相机var uiCamera GetUICamera();var popup tf.GetComponent<RectTransform>();//获取鼠标位置Vector2 mousePos Input.mousePosition;float screenWidt…...

区块链知识点5-Solidity编程基础

1. 全局变量名 具体描述 msg.sender 返回当前调用函数的调用者的地址 msg.value 当前消息所附带的以太币&#xff0c;单位为wei 2.变量的用法 默认存储位置修饰符 函数的返回值 memory 函数内部的局…...

OLAP与OLTP架构设计原理对比

OLAP与OLTP架构设计原理对比 一、核心区别 维度OLTPOLAP设计目标支持高并发、低延迟的事务操作&#xff08;增删改查&#xff09;支持复杂分析查询&#xff08;聚合、多维度统计&#xff09;数据模型规范化模型&#xff08;3NF&#xff09;&#xff0c;减少冗余维度模型&…...

ubuntu20.04在mid360部署direct_lidar_odometry(DLO)

editor&#xff1a;1034Robotics-yy time&#xff1a;2025.4.10 1.下载DLO&#xff0c;mid360需要的一些...: 1.1 在工作空间/src下 下载DLO&#xff1a; git clone https://github.com/vectr-ucla/direct_lidar_odometry 1.2 在工作空间/src下 下载livox_ros_driver2&…...

检索增强生成(RAG)架构深度解析:突破大模型边界的工程实践

一、RAG技术架构设计哲学 1.1 范式演进&#xff1a;从静态模型到动态知识系统 graph LR A[传统LLM架构] -->|问题| B[依赖预训练参数] B --> C[知识固化风险] C --> D[领域适配困难]A -->|解决方案| E[RAG增强架构] E --> F[实时知识检索] F --> G[动态上下…...

线代第四课:行列式的性质

行列式性质 转置行列式 把行列式的第一行转置成第一列&#xff0c;使用表示 如果在转置一下&#xff1a; 性质一&#xff1a; 行列地位相同&#xff0c;对行性质&#xff0c;对列性质 性质二&#xff1a; 交换D的两行&#xff08;列&#xff09;&#xff0c;D值变符号 性…...

【语音识别】vLLM 部署 Whisper 语音识别模型指南

目录 1. 模型下载 2. 环境安装 3. 部署脚本 4. 服务测试 语音识别技术在现代人工智能应用中扮演着重要角色&#xff0c;OpenAI开源的Whisper模型以其出色的识别准确率和多语言支持能力成为当前最先进的语音识别解决方案之一。本文将详细介绍如何使用vLLM&#xff08;一个高…...

Python | kelvin波的水平空间结构

写在前面 简单记录一下之前想画的一个图&#xff1a; 思路 整体比较简单&#xff0c;两个子图&#xff0c;本质上就是一个带有投影&#xff0c;一个不带投影&#xff0c;通常用在EOF的空间模态和时间序列的绘制中&#xff0c;可以看看之前的几个详细的画法。 Python | El Ni…...

什么叫行列式

《行列式&#xff1a;数学中的重要概念及其应用》 行列式是数学中的一个重要概念&#xff0c;主要用于描述线性方程组、向量空间等方面的性质。以下是关于它的详细介绍&#xff1a; 定义 行列式是由排成正方形的一组数&#xff08;称为元素&#xff09;按照特定的规则计算得…...

构建高可用大数据平台:Hadoop与Spark分布式集群搭建指南

想象一下&#xff0c;你手握海量数据&#xff0c;却因为测试环境不稳定&#xff0c;频频遭遇宕机和数据丢失的噩梦。Hadoop和Spark作为大数据处理的“黄金搭档”&#xff0c;如何在分布式高可用&#xff08;HA&#xff09;环境下稳如磐石地运行&#xff1f;答案就在于一个精心构…...

[leetcode]211. 添加与搜索单词(Trie+DFS)

题目链接 题意 实现词典类 WordDictionary &#xff1a; WordDictionary() 初始化词典对象void addWord(word) 将 word 添加到数据结构中&#xff0c;之后可以对它进行匹配bool search(word) 如果数据结构中存在字符串与 word 匹配&#xff0c;则返回 true &#xff1b;否则…...

AI | 字节跳动 AI 中文IDE编辑器 Trae 初体验

Trae 简介与安装 &#x1f526; 什么是 Trae Trae 是大厂字节跳动出品的国内首个 AI IDE&#xff0c;深度理解中文开发场景。AI 高度集成于 IDE 环境之中&#xff0c;为你带来比 AI 插件更加流畅、准确、优质的开发体验。说是能够不用写代码&#xff0c;全靠一张嘴跟 AI 聊天…...

【开发经验】结合实际问题解决详述HTTPS通信过程

最近的开发调试过程中涉及到了HTTPS发送与接收&#xff0c;遇到实际问题才发现对这部分尚属于一知半解。结合实际问题的解决过程来详细整理以下HTTPS通信过程。 需要调试的功能为BMC作为客户端向搭建好的Web服务器发送HTTPS请求&#xff0c;Web服务器负责接收处理发送过来的HT…...

灵霄破茧:仙途启幕 - 灵霄门新篇-(4)

重建之路&#xff0c;风云再起 灵霄门内一片萧瑟&#xff0c;残垣断壁间弥漫着悲伤与凝重。弟子们忙碌地清理着战场&#xff0c;救治伤员&#xff0c;每个人的脸上都带着劫后余生的疲惫。陈霄日夜守在玄风真人的榻前&#xff0c;眼中满是自责与担忧。玄风真人的伤势极重&#…...

微信小程序事件绑定基本语法

微信小程序使用 bind 或 catch 前缀绑定事件&#xff0c;语法如下&#xff1a; <组件 bind事件名"处理函数" catch事件名"处理函数"></组件> bind&#xff1a;事件绑定&#xff0c;允许事件冒泡&#xff08;向父组件传递&#xff09;。 catc…...

vscode 连不上 Ubuntu 18 server 的解决方案

下载 vscode 历史版本 18.5&#xff08;windows请装在 系统盘 C 盘&#xff09; 打开 vdcode&#xff0c;将 自动更新 设置为 None &#xff08;很关键&#xff0c;否则容易前功尽弃&#xff09; 重命名&#xff08;删除&#xff09; 服务器上的 .vscode-server 文件夹 重新…...

OSPF接口的网络类型和不规则区域

网络类型(数据链路层所使用的协议所构建的二层网络类型) 1、MA --- 多点接入网络 BMA --- 支持广播的多点接入网络 NBMA --- 不支持广播的多点接入网络 2、P2P --- 点到点网络 以太网 --- 以太网最主要的特点是需要基于MAC地址进行物理寻址&#xff0c;主要是因为以太网接口所连…...

基于Flask的勒索病毒应急响应平台架构设计与实践

基于Flask的勒索病毒应急响应平台架构设计与实践 序言&#xff1a;安全工程师的防御视角 作为从业十年的网络安全工程师&#xff0c;我深刻理解勒索病毒防御的黄金时间法则——应急响应速度每提升1分钟&#xff0c;数据恢复成功率将提高17%。本文介绍的应急响应平台&#xff…...

0410 | 软考高项笔记:项目管理概述

以下是不同组织结构中项目经理的角色、工作特点以及快速记忆的方法&#xff1a; 不同组织结构中项目经理的角色和工作特点 组织结构项目经理的角色工作特点职能型组织项目协调者、辅助管理者权力有限&#xff0c;主要负责协调部门间的工作&#xff0c;项目成员向部门经理汇报…...

基于 Qt 的图片处理工具开发(一):拖拽加载与基础图像处理功能实现

一、引言 在桌面应用开发中&#xff0c;图片处理工具的核心挑战在于用户交互的流畅性和异常处理的健壮性。本文以 Qt为框架&#xff0c;深度解析如何实现一个支持拖拽加载、亮度调节、角度旋转的图片处理工具。通过严谨的文件格式校验、分层的架构设计和用户友好的交互逻辑&am…...

2025年4月通信科技领域周报(3.31-4.06):6G技术加速落地与全连接生态构建

2025年4月通信科技领域周报&#xff08;3.31-4.06&#xff09;&#xff1a;6G技术加速落地与全连接生态构建 目录 一、本周热点回顾二、技术进展深度解析三、产业动态全景扫描四、行业生态与政策风向五、专业术语解释六、免责声明 一、本周热点回顾 1. 华为发布6G全场景技术…...

Codeforces-CF816B-Karen and Coffee(差分/前缀和)

题目翻译&#xff1a; Karen 喜欢咖啡。 她有 n 本食谱&#xff0c;第 i 本食谱包含两个数 li​,ri​&#xff0c;表示这本食谱推荐用 [li​,ri​] 之间的温度&#xff08;包含 li​.ri​&#xff09;来煮咖啡。 Karen 认为一个温度 a 是可接受的当且仅当有 ≥k 本食谱推荐用 …...

4.DJI-PSDK云台x-port控制:

DJI-PSDK云台x-port控制&#xff1a; X-Port 功能控制&#xff0c;即控制 X-Port 云台&#xff0c;头文件为 dji_xport.h 使用PSDK 的“云台控制”功能&#xff0c;开发者需要先设计负载设备的云台并开发出控制云台的程序&#xff0c;将云台的控制函数注册到PSDK 指定的接口后…...