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

Jwt和Session的区别和优缺点

目录

一、Authentication和Authorization的区别

二、用户认证的两种主流方法

① 、基于session认证流程如下:

②、基于token(令牌)用户认证如下:

三、区别和优缺点

JWT的优点:

JWT的缺点:

安全性

性能

一次性

四、总结


一、Authentication和Authorization的区别

  • Authentication:用户认证,指验证用户身份,例如以A身份登录,那么应用程序需要通过用户名和密码确认你真的是A。
  • Authorization:授权,指确认你的身份之后提供给你权限,例如用户A可以修改数据,而用户B只能阅读数据。

      由于http协议是无状态的,每一次请求都无状态。当一个用户通过用户名和密码登录了之后,下一个请求不会携带任何状态,应用程序无法知道他的身份,那就必须重新认证。因此我们希望用户登录成功之后每一次http请求,都能够保存登录状态。

二、用户认证的两种主流方法

目前主流的用户认证方法有基于token和基于session两种方式。

① 、基于session认证流程如下:

  1. 用户输入其登录信息;
  2. 服务器验证信息是否正确,并创建一个session,然后将其存储在数据库中;
  3. 服务器为用户生成一个sessionId,将具有sesssionId的Cookie将放置在用户浏览器中;
  4. 在后续请求中,会根据数据库验证sessionID,如果有效,则接受请求;
  5. 一旦用户注销应用程序,会话将在客户端和服务器端都被销毁;

②、基于token(令牌)用户认证如下:

最常用的是JSON Web Token(jwt):【一个jwt实际上就是一个字符串,它由三部分组成,头部、载荷与签名,这三个部分都是json格式。】

  1. 用户输入登录信息
  2. 服务器验证信息是否正确,并返回已签名的token
  3. token储在客户端,例如存在local storage或cookie中
  4. 之后的HTTP请求都将token添加到请求头里
  5. 服务器解码JWT,并且如果令牌有效,则接受请求
  6. 一旦用户注销,令牌将在客户端被销毁,不需要与服务器进行交互一个关键是,令牌是无状态的。后端服务器不需要保存令牌或当前session的记录。

三、区别和优缺点

        基于session和基于jwt的方式的主要区别就是用户的状态保存的位置,session是保存在服务端的,而jwt是保存在客户端的。

JWT的优点:

  • 可扩展性好 应用程序分布式部署的情况下,session需要做多机数据共享,通常可以存在数据库或者redis里面。而jwt不需要。
  • 无状态 jwt不在服务端存储任何状态。RESTful API的原则之一是无状态,发出请求时,总会返回带有参数的响应,不会产生附加影响。用户的认证状态引入这种附加影响,这破坏了这一原则。另外jwt的载荷中可以存储一些常用信息,用于交换信息,有效地使用 JWT,可以降低服务器查询数据库的次数。

JWT的缺点:

安全性

        由于jwt的payload是使用base64编码的,并没有加密,因此jwt中不能存储敏感数据。而session的信息是存在服务端的,相对来说更安全。

性能

        jwt太长。由于是无状态使用JWT,所有的数据都被放到JWT里,如果还要进行一些数据交换,那载荷会更大,经过编码之后导致jwt非常长,cookie的限制大小一般是4k,cookie很可能放不下,所以jwt一般放在local storage里面。并且用户在系统中的每一次http请求都会把jwt携带在Header里面,http请求的Header可能比Body还要大。而sessionId只是很短的一个字符串,因此使用jwt的http请求比使用session的开销大得多。

一次性

        无状态是jwt的特点,但也导致了这个问题,jwt是一次性的。想修改里面的内容,就必须签发一个新的jwt。

(1)无法废弃 通过上面jwt的验证机制可以看出来,一旦签发一个jwt,在到期之前就会始终有效,无法中途废弃。例如你在payload中存储了一些信息,当信息需要更新时,则重新签发一个jwt,但是由于旧的jwt还没过期,拿着这个旧的jwt依旧可以登录,那登录后服务端从jwt中拿到的信息就是过时的。为了解决这个问题,我们就需要在服务端部署额外的逻辑,例如设置一个黑名单,一旦签发了新的jwt,那么旧的就加入黑名单(比如存到redis里面),避免被再次使用。

(2)续签 如果你使用jwt做会话管理,传统的cookie续签方案一般都是框架自带的,session有效期30分钟,30分钟内如果有访问,有效期被刷新至30分钟。一样的道理,要改变jwt的有效时间,就要签发新的jwt。最简单一种方式是每次请求刷新jwt,即每个http请求都返回一个新的jwt。这个方法不仅暴力不优雅,而且每次请求都要做jwt的加密解密,会带来性能问题。另一种方法是在redis中单独为每个jwt设置过期时间,每次访问时刷新jwt的过期时间。

        可以看出想要破解jwt一次性的特性,就需要在服务端存储jwt的状态。但是引入 redis 之后,就把无状态的jwt硬生生变成了有状态了,违背了jwt的初衷。而且这个方案和session都差不多了。

四、总结

适合使用jwt的场景:

  • 有效期短
  • 只希望被使用一次

        比如,用户注册后发一封邮件让其激活账户,通常邮件中需要有一个链接,这个链接需要具备以下的特性:能够标识用户,该链接具有时效性(通常只允许几小时之内激活),不能被篡改以激活其他可能的账户,一次性的。这种场景就适合使用 jwt。

        而由于 jwt 具有一次性的特性。单点登录会话管理 非常不适合用 jwt,如果在服务端部署额外的逻辑存储 jwt 的状态,那还不如使用 session。基于 session 有很多成熟的框架可以开箱即用,用jwt 还要自己实现逻辑。但目前业界大部分都是Jwt当作Session用。

相关文章:

Jwt和Session的区别和优缺点

目录 一、Authentication和Authorization的区别 二、用户认证的两种主流方法 ① 、基于session认证流程如下: ②、基于token(令牌)用户认证如下: 三、区别和优缺点 JWT的优点: JWT的缺点: 安全性 …...

如何使用 Python 读取和写入 CSV 文件?

在Python中,处理CSV文件是一项常见的任务,通常用于数据交换和数据存储。 Python的标准库csv模块提供了一种方便的方式来读取和写入CSV文件。 下面我将详细介绍如何使用Python的csv模块来读取和写入CSV文件,并提供一些实际开发中的建议和注意…...

FR2012富芮坤PMU:设置PMU GPIO为输入读取状态;在睡眠功能中读取IO;PMU GPIO设置唤醒源中断

从事嵌入式单片机的工作算是符合我个人兴趣爱好的,当面对一个新的芯片我即想把芯片尽快搞懂完成项目赚钱,也想着能够把自己遇到的坑和注意事项记录下来,即方便自己后面查阅也可以分享给大家,这是一种冲动,但是这个或许并不是原厂希望的,尽管这样有可能会牺牲一些时间也有哪天原…...

私有云dbPaaS为何被Gartner技术成熟度曲线标记为“废弃”?

当云计算席卷而来,基于云基础设施的数据库部署也改变了数据库。在传统的私有化部署(On-premises)和公有云部署(Public Cloud)之间,不断融合的混合IT(Mixed IT)形式成为最常见的企业级…...

RabbitMQ 高级特性——延迟队列

文章目录 前言延迟队列延迟队列的概念TTL 死信队列模拟延迟队列设置队列的 TTL设置消息的 TTL 延迟队列插件安装并且启动插件服务使用插件实现延迟功能 前言 前面我们学习了 TTL 和死信队列,当队列中的消息达到了过期时间之后,那么这个消息就会被死信交…...

Perl 引用

Perl 引用 Perl,作为一种灵活而强大的编程语言,广泛用于系统管理、网络编程、GUI开发等领域。在Perl编程中,引用(References)是一个核心概念,它允许变量引用其他数据,从而创建复杂的数据结构&a…...

llama2——微调lora,第一次参考教程实践完成包括训练和模型

前言:磕磕绊绊,不过收获很多,最大的收获就是解决报错error的分析方法和解决思路 1、首先,我参考的是这篇博客:怎样训练一个自己的大语言模型?全网最简单易懂的教程!_开源模型训练出一个语言模型…...

【人工智能数学基础篇】——深入详解矩阵分解:奇异值分解(SVD)与主成分分析(PCA)在数据降维与特征提取中的应用

目录 1. 引言 2. 矩阵分解概述 2.1 矩阵分解的意义 3. 奇异值分解(SVD) 3.1 定义与数学基础 3.2 SVD 的性质 3.3 SVD 在数据降维中的应用 3.4 示例代码:使用 SVD 进行图像压缩 3.5 结果分析 4. 主成分分析(PCA&#xff0…...

C++常见面试题-初级2

1. C和C有什么区别? C是面向对象的语言,而C是面向过程的语言;C引入new/delete运算符,取代了C中的malloc/free库函数;C引入引用的概念,而C中没有;C引入类的概念,而C中没有&#xff1…...

R square 的计算方法和一点思考

模型的性能评价指标有几种方案:RMSE(平方根误差)、MAE(平均绝对误差)、MSE(平均平方误差)、R2_score 其中,当量纲不同时,RMSE、MAE、MSE难以衡量模型效果好坏。这就需要用到R2_score&#xff1…...

梳理你的思路(从OOP到架构设计)_简介EIT造形

目录 1、 复习<基类 /子类>的扩充(extends)结构 典型的<基类/子类>代码结构 <基类/子类>代码结构的变形 2、 从<基类/子类>结构到EIT造形 3、 EIT造形的基本形与变形 1、 复习<基类 /子类>的扩充(extends)结构 典型的<基类/子类>代码…...

梳理你的思路(从OOP到架构设计)_认识EIT造形与内涵

目录 1、 认识类(Class)与内涵 2、 认识EIT造形与内涵 EIT造形&#xff1a; 类造形的组合​编辑 复习EIT的基本形与变形​编辑 不同内涵 EIT造形 1、 认识类(Class)与内涵 回顾 类(Class)是比较小的造形 各种不同内涵&#xff0c;可以透过类(Class)的形式(Form)来呈现出…...

【FTP】FTP基础知识点

文章目录 一、概述二、 工作原理2.1 两个连接2.2 安全性 三、代码实现&#xff1a;1. 选择合适的库2. 连接配置和初始化3. 连接状态检查4. 重连机制5. 文件操作6. 安全性7. 资源管理 参考&#xff1a; 一、概述 将某台计算机中的文件通过网络传送到可能相距很远的另一台计算机…...

排序算法(7):堆排序

问题 排序 [30, 24, 5, 58, 18, 36, 12, 42, 39] 堆排序 堆排序是一种基于堆数据结构的排序算法。堆是一个近似完全二叉树的结构&#xff0c;即除了最后一层外&#xff0c;每一层都必须填满&#xff0c;且最后一层从左往右填充。 堆可以分为大根堆和小根堆。在大根堆中&…...

BERT模型入门(6)语言建模

文章目录 自回归语言建模自编码语言建模 BERT模型在以下两个任务上进行预训练&#xff1a; &#xff08;1&#xff09;掩蔽语言建模 &#xff08;2&#xff09;下一句预测 让我们逐一了解这两种预训练策略是如何工作的。在介绍掩蔽语言模型任务之前&#xff0c;首先让我们了…...

RNN LSTM Seq2Seq Attention

非端到端&#xff1a; data -》 cleaning -》 feature Engining &#xff08;70%-80%工作 设计特征&#xff09;-》 分类器 -》预测 端到端 End-to-End&#xff1a; data -》 cleaning -》Deep learning&#xff08;表示学习&#xff0c;从数据中学习特征&#xff09; -》…...

go语言使用websocket发送一条消息A,持续接收返回的消息

在Go语言中实现一个WebSocket客户端&#xff0c;可以使用gorilla/websocket这个非常流行的库来处理WebSocket连接。下面是一个简单的示例&#xff0c;展示了如何创建一个WebSocket客户端&#xff0c;向服务器发送消息"A"&#xff0c;并持续接收来自服务器的响应。 首…...

音频进阶学习八——傅里叶变换的介绍

文章目录 前言一、傅里叶变换1.傅里叶变换的发展2.常见的傅里叶变换3.频域 二、欧拉公式1.实数、虚数、复数2.对虚数和复数的理解3.复平面4.复数和三角函数5.复数的运算6.欧拉公式 三、积分运算1.定积分2.不定积分3.基本的积分公式4.积分规则线性替换法分部积分法 5.定积分计算…...

沟通的艺术,学会转移矛盾

我的一位好友&#xff0c;资深项目经理&#xff0c;同时也是我公益课程的热心志愿者&#xff0c;最近向我倾诉了他在团队沟通上的挑战。 他发现&#xff0c;尽管辅导学员时感到轻松愉快&#xff0c;但与自己团队成员的沟通却充满挫折。 我询问了他的沟通方式&#xff0c;他解释…...

测评|携程集团25年社招在线测评北森题库、真题分析、考试攻略

携程集团社招入职测评北森题库主要考察以下几个方面&#xff1a; 1. **言语理解**&#xff1a;这部分主要测试应聘者运用语言文字进行思考和交流、迅速准确地理解和把握文段要旨的能力。 2. **资料分析**&#xff1a;包括文字题和图表题&#xff0c;考察应聘者快速找出关键信息…...

C++(进阶) 第4章 map和set的使⽤

C&#xff08;进阶) 第4章 map和set的使⽤ 文章目录 前言一、序列式容器和关联式容器二、set1. insert2.迭代器遍历3.范围for4.erase5.count6.lower_bound和upper_bound 三、multiset总结 前言 上一篇博客写了二叉搜索树&#xff0c;这一篇博客会在上一篇博客原来的上在深入介…...

数独游戏app制作拆解(之三)——数字候选区实现

所谓的数据候选区就是这个&#xff1a; 数字候选区功能及实现&#xff1a; 说明&#xff1a;这部分其实也是textview. 本区功能&#xff1a; 一、实现数字显示到显示区。点击显示区选定某个格子后&#xff0c;再点击这里的数字&#xff0c;会在格子内显示相应的数字。在编辑…...

数据结构——排序

*排序属于数据的运算 1、定义:将一组杂乱无章的数据按一定规律顺次排列一起,即将无序序列排成一个有序序列的运算。 (如果参加排序的数据结构包含多个数据域,那么排序往往是针对其中某个域而言) 2、排序的应用十分广泛:程序中间接应用(二分查找、最短路径、最小生成树…...

制造业4.0:AI与机器人如何重塑生产线

引言&#xff1a;从传统到未来的转型 在轰鸣的生产线上&#xff0c;传统制造业曾以规模化生产和成本效益为核心竞争力&#xff0c;推动了全球工业化进程。然而&#xff0c;面对现代市场的多样化需求和激烈竞争&#xff0c;这种模式正暴露出越来越多的局限性&#xff1a;产能过剩…...

Fastdfs V6.12.1集群部署(arm/x86均可用)

文章目录 一、 Fastdfs 介绍二、部署 信息三、步骤tracker/storage 机器的 compose 内容storage 机器的 composetracker 与 storage 启动目录层级与配置文件测试测试集群扩容与缩减注意事项 一、 Fastdfs 介绍 FastDFS 是一款高性能的分布式文件系统&#xff0c;特别适合用于存…...

【学习笔记】深入浅出详解Pytorch中的View, reshape, unfold,flatten等方法。

文章目录 一、写在前面二、Reshape&#xff08;一&#xff09;用法&#xff08;二&#xff09;代码展示 三、Unfold&#xff08;一&#xff09;torch.unfold 的基本概念&#xff08;二&#xff09;torch.unfold 的工作原理&#xff08;三&#xff09; 示例代码&#xff08;四&a…...

解决Presto dirver timestamp时区问题

#bigdata/metabase 一、背景介绍 1、Presto版本 使用阿里云集群的版本 EMR-5.4.2&#xff0c;Presto的版本为338&#xff1b; Facebook后续不再维护&#xff0c;Trino 351为首个版本 2、Metabase版本 历史版本为0.38.4&#xff0c;新版本为0.51.5 3、0.38.4 cast to time…...

【优选算法】Prefix-Kage:前缀和的算法影(上)

文章目录 1.概念解析2.代码实现2.1【模版】前缀和&#xff08;一维&#xff09;2.1.1 原理2.1.2 代码实现 2.2【模版】前缀和&#xff08;二维&#xff09;2.2.1 原理2.2.2 代码实现 希望读者们多多三连支持小编会继续更新你们的鼓励就是我前进的动力&#xff01; 本篇是优选算…...

中阳科技:量化交易模型的技术革新与实践应用

在金融市场日益复杂化的今天&#xff0c;量化交易作为数据驱动的现代化交易方式&#xff0c;已成为金融领域发展的关键方向。中阳科技凭借深厚的技术积累与创新能力&#xff0c;积极探索量化交易模型的优化与应用&#xff0c;开辟了智能金融新局面。 量化交易的优势与市场前景…...

golang 判断一个点是否在一个多边形内

我有一需求为&#xff1a;判断一个点&#xff08;经纬度范围&#xff09;是否在一个多边形范围内&#xff08;多个经纬度点&#xff09; 这里我借助几何库&#xff08; github.com/paulmach/orb&#xff09;来处理地理空间数据 可以通过在线获取经纬度来确认代码正确性 packa…...

图论笔记1

1.1邻接矩阵储存法 //创建:二维数组vector<vector<int>> graph(n,vector<int>(n,0));//储存for(int i0;i<m;i){int x1,x2;cin>>x1>>x2;graph[x1-1][x2-1]1;}1.2邻接表储存法 补充&#xff1a;c中的list是链表 链接 //创建&#xff1a;数组…...

大模型QLoRA微调——基于Qwen2-7B的自动化病历摘要生成系统

01 项目简介 &#xff08;1&#xff09;项目背景 医疗文档中包含大量的诊疗信息&#xff0c;例如疾病诊断、手术名称、解剖部位、药物使用以及影像和实验室检查结果。这些信息是医疗数据分析的核心&#xff0c;但由于医疗文本内容复杂、格式多样&#xff0c;提取这些关键内容…...

CTFHub-ssrf

技能树--Web--SSRF 内网访问 开启题目 尝试访问位于127.0.0.1的flag.php吧 进入环境 根据提示输入即可 127.0.0.1/flag.php 伪协议读取文件 开启题目 尝试去读取一下Web目录下的flag.php吧 进入环境&#xff0c;根据提示输入 file:///var/www/html/flag.php 鼠标右键查看…...

使用ElasticSearch实现全文检索

文章目录 全文检索任务描述技术难点任务目标实现过程1. java读取Json文件&#xff0c;并导入MySQL数据库中2. 利用Logstah完成MySQL到ES的数据同步3. 开始编写功能接口3.1 全文检索接口3.2 查询详情 4. 前端调用 全文检索 任务描述 在获取到数据之后如何在ES中进行数据建模&a…...

【docker】容器编排之docker swarm

Docker Swarm容器编排详细讲解 Docker Swarm是Docker的原生容器编排工具&#xff0c;它通过将多个Docker引擎组合成一个集群来实现高效的容器部署和管理。 Swarm提供了服务发现、负载均衡、扩展、自动恢复等功能&#xff0c;能够让开发者和运维人员以更简便的方式管理容器化应…...

微信小程序苹果手机自带的数字键盘老是弹出收起,影响用户体验,100%解决

文章目录 1、index.wxml2、index.js3、index.wxss1、index.wxml <!--index.wxml--> <view class="container"><view class="code-input-container"><view class="code-input-boxes"><!-- <block wx:for="{{…...

SCAU期末笔记 - Linux系统应用与开发教程样卷解析(2024版)

我真的不理解奥&#xff0c;为什么会有给样卷不自带解析的&#xff0c;对答案都没得对&#xff0c;故整理一篇 样卷1 一、选择题 1、为了遍历shell脚本调用时传入的参数&#xff0c;需要在shell脚本中使用_____。 A.$#表示参数的个数B.S表示所有参数C.$0表示脚本名D.$1表示…...

2024 年贵州技能大赛暨全省第二届数字技术应用职业技能竞赛“信息通信网络运行管理员”赛项--linux安全题

Linux操作系统渗透测试 Nmap -sS -p- ip 扫描 这题有俩种做法&#xff0c;一种用3306端口&#xff0c;另一种用48119端口 用48119端口是最简单的做法 nc 连接这个端口如何修改root密码 ssh连接 这样我们就成功的拿到root权限 1.通过本地PC中渗透测试平台Kali对服务器场景进…...

CTFshow-php特性(Web125-150)

CTFshow-php特性(Web125-150) Web125 <?php error_reporting(0); highlight_file(__FILE__); include("flag.php"); $a$_SERVER[argv]; $c$_POST[fun]; if(isset($_POST[CTF_SHOW])&&isset($_POST[CTF_SHOW.COM])&&!isset($_GET[fl0g])){if(!p…...

机器学习一点基础

人工智能&#xff08;Artificial Intelligence, AI&#xff09;和机器学习&#xff08;Machine Learning, ML&#xff09;是当今最热门的技术领域之一。然而&#xff0c;初学者往往面对大量的术语和技术细节&#xff0c;不知道从何入手。本文将以通俗易懂的方式介绍机器学习的基…...

【C++】 While循环高级分析与实践扩展

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;While 循环基础知识1.1 基本语法形式1.2 if 与 while 的区别1.3 循环结构比较 &#x1f4af;While 循环实例分析2.1 执行结果2.2 计算流程分析 &#x1f4af;While 循环注意…...

React Native状态管理器Redux、MobX、Context API、useState

Redux、MobX、Context API、useState都是React中用于状态管理的工具&#xff0c;但它们各自有不同的特点和使用场景。 Redux 介绍&#xff1a; Redux是一个JavaScript状态管理库&#xff0c;最初由Dan Abramov和Andrew Clark于2015年开发。它基于Flux架构&#xff0c;强调状态…...

【AI系列】Paddle Speech安装指南

文章目录 环境依赖1. 安装Python1.1 下载Python安装包1.2 安装gcc1.3 安装依赖库1.4 编译和安装Python1.5 配置环境变量 2. 安装PaddlePaddle3. 安装PaddleSpeech4. 运行PaddleSpeech5. 解决常见问题5.1 错误&#xff1a;libssl.so.1.1解决方法&#xff1a; 5.2 错误&#xff1…...

【学习笔记总结】华为云:应用上云后的安全规划及设计

一、背景和问题 数字化时代&#xff0c;随着信息技术的飞速发展&#xff0c;企业和各类组织纷纷将自身的应用程序迁移至云端。云计算凭借其诸多优势&#xff0c;如成本效益、可扩展性、灵活性以及便捷的资源共享等&#xff0c;已然成为了现代业务运营的重要支撑。 今年&#xf…...

数据可视化-2. 条形图

目录 1. 条形图适用场景分析 1.1 比较不同类别的数据 1.2 展示数据分布 1.3 强调特定数据点 1.4 展示时间序列数据的对比 1.5 数据可视化教育 1.6 特定领域的应用 2. 条形图局限性 3. 条形图图代码实现 3.1 Python 源代码 3.2 条形图效果&#xff08;网页显示&#…...

设置Qt程序开机自启动(windows版本)

前言 本文展示在windows环境下&#xff0c;通过代码实现更改系统注册表的方式来实现程序的开机自动启动。 一、注册表 需要更改的系统注册表为: HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run 二、代码演示 1.头文件 头文件autorun.h #ifndef …...

LeetCode hot100-80

https://leetcode.cn/problems/partition-labels/description/?envTypestudy-plan-v2&envIdtop-100-liked 763. 划分字母区间 已解答 中等 相关标签 相关企业 提示 给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段&#xff0c;同一字母最多出现在一个片段中。…...

Ubuntu批量修改文件名

文章目录 批量重命名文件&#xff1a;Ubuntu下使用find命令结合sed和mv参考 批量重命名文件&#xff1a;Ubuntu下使用find命令结合sed和mv 在日常开发和文件管理中&#xff0c;有时我们需要批量重命名一批文件&#xff0c;比如将文件名中的某个特定字符串替换为另一个字符串。…...

CVMJ 2024 | StyleDiffusion: 基于Prompt嵌入的真实图像反演和文本编辑

论文&#xff1a;《StyleDiffusion: Prompt-Embedding Inversion for Text-Based Editing》 代码&#xff1a;https://github.com/sen-mao/StyleDiffusion​https://github.com/sen-mao/StyleDiffusion​ 问题背景 已有一些工作利用预训练扩散模型进行真实图像的编辑。这些方…...

UE5 帧数优化思路

A、思路 1、直接在GM的事件beginplay中改可延展性相对质量级别&#xff0c; 改为1或2&#xff0c;最简单粗暴的方式&#xff0c;而效果明显&#xff0c;帧数提高一倍&#xff0c;GPU占用率与显存占用直接下降一大截。在物体密集的地方卡顿会缓解很多&#xff0c;物体少的地方…...