前端性能优化:从指标监控到全链路落地(2024最新实战指南)

前端性能优化:从指标监控到全链路落地(2024最新实战指南)

引言:性能不是“可选项”,而是“生存线”

在前端开发中,“性能优化”常被视为“锦上添花”的工作——但数据告诉我们,它早已成为决定产品生死的关键:

  • Google 2024年用户体验报告显示:移动端页面加载延迟每增加1秒,用户流失率上升7%,转化率下降3.5%;
  • 电商场景更严峻:亚马逊数据表明,页面加载时间从2秒增至5秒,购物车放弃率提升27%;
  • 搜索引擎优化(SEO)中,Core Web Vitals已成为Google排名的核心权重指标,不达标页面将直接被降权。

然而,多数开发者的性能优化仍停留在“压缩图片、减少请求”的零散操作上,缺乏“从指标定义→问题定位→全链路优化→持续监控”的系统性方法论。本文基于2024年最新前端技术栈(Vite+Vue3/React18+TS),结合3个真实项目的优化经验,拆解一套可落地、可量化、可复现的性能优化体系,帮你从“被动调优”转向“主动性能管控”。

一、性能指标体系:先懂“好坏”,再谈“优化”

在动手优化前,必须先明确“用什么指标衡量性能”。2024年前端性能指标已从“单一加载速度”升级为“用户体验导向的多维度体系”,核心分为核心Web指标(Core Web Vitals)辅助评估指标两类。

1.1 核心Web指标(Google官方权重指标)

Core Web Vitals是Google定义的“用户体验核心指标”,2024年仍以“LCP、INP、CLS”为核心,但指标阈值和计算逻辑有细微更新,需重点关注:

(1)最大内容绘制(Largest Contentful Paint, LCP)
  • 定义:页面从开始加载到“最大内容元素”完成绘制的时间,反映“页面核心内容加载速度”;
  • 计算逻辑:仅统计“文本、图片、视频帧”等可见元素,排除背景图、隐藏元素;2024年新增“跨域图片LCP识别”——若图片来自CDN,需通过fetchpriority="high"标记为核心资源,否则可能漏算;
  • 达标阈值
    • 优秀:≤2.5秒(移动端/桌面端一致);
    • 需优化:2.5~4秒;
    • 不合格:>4秒;
  • 常见问题场景
    • 核心图片未预加载(如首屏Banner图);
    • 服务器响应慢(接口返回延迟>1秒);
    • 渲染阻塞资源(如未拆分的大CSS/JS)。
(2)交互到下一个绘制(Interaction to Next Paint, INP)
  • 定义:用户与页面交互(点击、输入、滑动等)到“浏览器完成下一次绘制”的时间,反映“页面交互流畅度”;
  • 计算逻辑:2024年完全替代原FID(首次输入延迟),原因是FID仅统计“首次交互”,而INP统计“页面生命周期内所有交互”,更贴合真实用户行为;最终得分取“所有交互延迟的第90百分位值”(即90%的交互延迟需达标);
  • 达标阈值
    • 优秀:≤200毫秒;
    • 需优化:200~500毫秒;
    • 不合格:>500毫秒;
  • 常见问题场景
    • 交互事件中执行重计算(如列表渲染时未防抖节流);
    • 大型组件重渲染(如Vue/React的无用渲染);
    • 主线程阻塞(如同步AJAX请求、大循环)。
(3)累积布局偏移(Cumulative Layout Shift, CLS)
  • 定义:页面加载过程中“元素意外偏移”的累积分数,反映“页面布局稳定性”;
  • 计算逻辑:每次布局偏移的“影响面积比例 × 偏移距离比例”之和,2024年新增“动态内容豁免规则”——若元素偏移是用户主动触发(如点击展开下拉菜单),不计入CLS;
  • 达标阈值
    • 优秀:≤0.1;
    • 需优化:0.1~0.25;
    • 不合格:>0.25;
  • 常见问题场景
    • 图片未设置宽高比(加载后撑开容器);
    • 动态插入内容(如广告弹窗、实时消息);
    • 字体加载导致文本重排(FOIT/FOUT)。

1.2 辅助评估指标(定位问题的关键)

核心指标用于“判断结果”,辅助指标用于“定位原因”,常用的有:

  • 首次内容绘制(First Contentful Paint, FCP):页面首次出现文本/图片的时间,反映“页面是否开始加载”,达标阈值≤1.8秒;
  • 首次输入延迟(First Input Delay, FID):虽被INP替代,但仍可用于“首屏交互流畅度”评估,达标阈值≤100毫秒;
  • 主线程阻塞时间(Total Blocking Time, TBT):页面加载过程中“主线程忙碌时间”(任务执行>50毫秒的部分总和),达标阈值≤200毫秒;
  • 资源加载完成时间(Time to Interactive, TTI):页面从加载到“可完全交互”的时间(所有脚本加载完成、事件绑定就绪),达标阈值≤3.8秒。

1.3 指标监控工具链(2024最新工具)

光懂指标不够,还需用工具精准测量,2024年主流工具如下:

工具名称核心用途优势适用场景
Lighthouse 11.0+全维度性能评分(含Core Web Vitals)支持本地/CI集成,生成优化建议报告开发阶段自测、CI性能门禁
Chrome DevTools Performance主线程任务分析、资源加载时序可录制用户操作,定位交互卡顿原因问题定位(如INP高)
Web Vitals API真实用户性能数据(RUM)上报采集生产环境真实用户数据,反映实际体验线上性能监控
Sentry Performance前端性能+错误关联监控可定位“性能问题触发的错误”(如慢接口导致白屏)线上问题排查
Vite-plugin-web-vitalsVite项目性能实时监控开发阶段实时显示LCP/INP/CLS,即时优化Vite项目开发调试

工具使用示例:用Lighthouse 11.0测试某中台系统,得分68分(不合格),报告显示核心问题:LCP=4.8秒(核心图片未预加载)、INP=580毫秒(表格渲染无节流)、CLS=0.32(动态表单未占坑)——这为后续优化指明了方向。

二、全链路优化实战:从“加载→解析→渲染→运行时”层层突破

性能优化的核心是“找到瓶颈环节,针对性解决”。前端页面生命周期分为“加载→解析→渲染→运行时”4个阶段,每个阶段的优化重点不同,需按链路逐一突破。

2.1 加载阶段优化:减少“资源到达时间”(核心目标:降低LCP)

加载阶段是性能瓶颈的重灾区,尤其是移动端弱网环境,优化核心是“让核心资源更快到达浏览器”,关键方案如下:

(1)核心资源预加载:优先加载“影响LCP的资源”
  • 问题:首屏核心资源(如Banner图、核心CSS)常因加载顺序靠后,导致LCP延迟;
  • 方案:用<link rel="preload">标记核心资源,强制浏览器优先加载;2024年需注意“预加载优先级”——通过fetchpriority="high"提升核心资源优先级,避免与其他资源抢占带宽;
  • 代码示例(Vue3项目index.html):
    <!-- 预加载首屏Banner图(跨域资源需加crossorigin) -->
    <link rel="preload" href="/static/banner.png" as="image" fetchpriority="high" crossorigin="anonymous"
    >
    <!-- 预加载核心CSS(避免渲染阻塞) -->
    <link rel="preload" href="/static/main.css" as="style" onload="this.onload=null;this.rel='stylesheet'"
    >
    <!-- 预加载关键JS(如Vue运行时) -->
    <link rel="preload" href="/static/vue.runtime.esm.js" as="script" fetchpriority="high"
    >
    
  • 注意事项:避免盲目预加载——预加载资源过多会占用带宽,导致非核心资源延迟;建议仅预加载“LCP相关资源”(1~2个图片+1个CSS+1个JS)。
(2)资源压缩与拆分:减小“传输体积”和“解析时间”
  • JS/CSS压缩:Vite/Webpack默认支持Terser(JS压缩)和CSSNano(CSS压缩),2024年建议开启“压缩级别3”(terserOptions: { compress: { level: 3 } }),比默认级别多压缩15%~20%体积;
  • Tree Shaking优化:确保未使用的代码被删除,关键配置(Vite):
    // vite.config.js
    export default defineConfig({build: {terserOptions: {compress: {drop_console: true, // 删除console(生产环境)drop_debugger: true, // 删除debugger},},rollupOptions: {output: {// 按模块拆分JS,避免单个JS过大manualChunks: {vue: ['vue', 'vue-router'], // Vue相关拆分为单独chunkutils: ['lodash-es', 'date-fns'], // 工具库拆分为单独chunk},},},},
    });
    
  • CSS拆分:用vite-plugin-css-split将大CSS拆分为“首屏CSS”和“非首屏CSS”,首屏CSS内联到HTML(减少请求),非首屏CSS异步加载:
    // vite.config.js
    import cssSplit from 'vite-plugin-css-split';
    export default defineConfig({plugins: [cssSplit({splitOn: ['@media', '@import'], // 按媒体查询、import拆分minSize: 1024, // 拆分后CSS最小体积(1KB)}),],
    });
    
  • 效果对比:某中台系统优化后,JS体积从1.2MB→580KB,CSS体积从450KB→180KB,资源加载时间减少42%。
(3)CDN与缓存策略:让资源“就近获取”且“不重复下载”
  • CDN选择:2024年建议优先选择“支持HTTP/3”的CDN(如阿里云CDN、Cloudflare),HTTP/3比HTTP/2减少30%~50%的连接建立时间,尤其适合移动端弱网环境;
  • 缓存策略:按“资源类型”设置不同缓存时长,核心原则是“不变资源长缓存,可变资源短缓存”:
    资源类型Cache-Control配置说明
    图片/字体max-age=31536000, immutable一年长缓存,immutable避免重新验证
    拆分后的JS/CSSmax-age=86400, must-revalidate一天缓存,过期后验证是否更新
    HTML文件max-age=0, must-revalidate不缓存,每次请求验证
  • 缓存更新:不变资源(如图片)用“内容哈希命名”(如banner.[hash].png),更新时哈希变化,自动触发CDN缓存更新;可变资源(如API接口)用ETagLast-Modified实现协商缓存。

2.2 解析阶段优化:减少“主线程阻塞”(核心目标:降低TBT)

浏览器加载资源后,需解析HTML/CSS/JS并执行,若主线程被长时间占用(如执行大JS),会导致“解析延迟”和“交互无响应”,优化核心是“让主线程更高效”。

(1)JS执行优化:避免“长任务”阻塞主线程
  • 问题:单个JS任务执行时间>50毫秒会被标记为“长任务”,导致主线程阻塞,影响FID/INP;
  • 方案1:代码分片(Code Splitting):用动态import拆分大JS,优先加载“首屏必需代码”,非必需代码延迟加载(如路由懒加载):
    // Vue Router懒加载示例(首屏仅加载Home组件)
    const routes = [{path: '/',component: () => import('./views/Home.vue'), // 首屏必需,同步加载},{path: '/user',component: () => import(/* webpackChunkName: "user" */ './views/User.vue'), // 懒加载},
    ];
    
  • 方案2:任务拆分(Task Splitting):将长任务拆分为多个短任务(每个<50毫秒),用requestIdleCallbacksetTimeout让主线程有空隙处理交互:
    // 优化前:长循环阻塞主线程(执行时间>300毫秒)
    function processLargeData(data) {data.forEach(item => {// 复杂处理逻辑});
    }// 优化后:拆分为短任务
    function processLargeDataOptimized(data) {let index = 0;function processNextChunk() {const end = Math.min(index + 10, data.length); // 每次处理10条数据for (; index < end; index++) {// 复杂处理逻辑}if (index < data.length) {// 主线程空闲时继续处理requestIdleCallback(processNextChunk);}}processNextChunk();
    }
    
  • 效果:某数据表格渲染任务(处理1000条数据)优化后,主线程阻塞时间从320毫秒→68毫秒,INP从450毫秒→180毫秒。
(2)CSS解析优化:避免“渲染阻塞”
  • 问题:CSS会阻塞HTML解析和页面渲染(浏览器需等CSS解析完成才能生成渲染树);
  • 方案1:内联首屏CSS:将首屏必需的CSS内联到HTML的<style>标签中,避免额外请求;非首屏CSS用media="print"标记为“非阻塞”,加载完成后切换为media="all"
    <!-- 内联首屏CSS -->
    <style>.header { height: 60px; background: #fff; }.banner { width: 100%; height: 200px; }
    </style>
    <!-- 非首屏CSS:初始标记为print,不阻塞渲染 -->
    <link rel="stylesheet" href="/static/non-critical.css" media="print" onload="this.media='all'"
    >
    
  • 方案2:避免CSS @import@import会导致CSS串行加载(需等前一个CSS加载完成才加载下一个),建议用<link>并行加载多个CSS;
  • 方案3:CSS选择器优化:避免复杂选择器(如div:nth-child(2).class),浏览器解析CSS选择器是“从右向左”,复杂选择器会增加解析时间;建议用“类选择器”(如.header-banner)替代复杂组合选择器。

2.3 渲染阶段优化:减少“布局重排重绘”(核心目标:降低CLS、INP)

渲染阶段的性能问题主要是“布局重排(Reflow)”和“重绘(Repaint)”——重排会重新计算元素位置和大小,开销是重绘的10~50倍,需重点规避。

(1)CLS优化:让布局“稳定不偏移”
  • 方案1:元素占坑:动态加载的内容(如图片、广告、列表)必须提前设置宽高比,避免加载后撑开容器;推荐用CSS aspect-ratio(2024年所有浏览器已支持):
    /* 图片容器占坑:宽高比16:9 */
    .img-container {aspect-ratio: 16 / 9;overflow: hidden;
    }
    .img-container img {width: 100%;height: 100%;object-fit: cover; /* 避免图片拉伸 */
    }
    
  • 方案2:动态内容延迟插入:用户视野外的动态内容(如实时消息、弹窗),需在用户滚动到对应区域后再插入,避免突然占用空间;
  • 方案3:字体加载优化:用font-display: swap避免字体加载导致的文本重排(FOIT/FOUT),同时预加载核心字体:
    /* 字体加载优化 */
    @font-face {font-family: 'MyFont';src: url('/static/MyFont.woff2') format('woff2');font-display: swap; /* 字体加载前用系统字体,加载后替换 */font-weight: 400;font-style: normal;
    }
    
  • 效果:某电商首页优化后,CLS从0.35→0.08,达到优秀标准。
(2)重排重绘优化:减少“不必要的渲染计算”
  • 方案1:批量操作DOM:避免频繁修改DOM样式,建议用DocumentFragment批量插入DOM,或先隐藏元素(display: none)再修改,最后显示:
    // 优化前:频繁修改DOM,导致多次重排
    function updateList(items) {const list = document.getElementById('list');items.forEach(item => {const li = document.createElement('li');li.textContent = item.name;list.appendChild(li); // 每次append都触发重排});
    }// 优化后:批量插入,仅触发1次重排
    function updateListOptimized(items) {const list = document.getElementById('list');const fragment = document.createDocumentFragment(); // 虚拟容器items.forEach(item => {const li = document.createElement('li');li.textContent = item.name;fragment.appendChild(li); // 不触发重排});list.appendChild(fragment); // 仅1次重排
    }
    
  • 方案2:使用CSS Transform和Opacity:修改transformopacity不会触发重排,仅触发重绘(或合成层更新),适合动画效果:
    /* 优化前:修改top触发重排 */
    .box {position: absolute;top: 0;transition: top 0.3s;
    }
    .box:hover { top: 10px; }/* 优化后:修改transform,不触发重排 */
    .box {position: absolute;transition: transform 0.3s;
    }
    .box:hover { transform: translateY(10px); }
    
  • 方案3:启用CSS合成层:将频繁动画的元素(如弹窗、轮播图)提升为独立合成层,避免影响其他元素的渲染;用will-change: transform提示浏览器提前优化:
    .carousel {will-change: transform; /* 提示浏览器优化transform动画 */transform: translateZ(0); /* 强制创建合成层(兼容旧浏览器) */
    }
    

2.4 运行时优化:让“交互更流畅”(核心目标:降低INP)

运行时优化聚焦“用户交互过程中的性能”,尤其是复杂组件(如大数据表格、可视化图表)的交互流畅度。

(1)Vue/React组件优化:避免“无用渲染”
  • Vue3优化
    • definePropsdefineEmits明确 props/事件,减少响应式依赖;
    • shallowRef/shallowReactive处理非深度响应数据(如大数据列表);
    • v-memo缓存列表项,避免列表滚动时重复渲染:
      <!-- 大数据表格优化:v-memo缓存相同项 -->
      <template><table><tr v-for="item in data" :key="item.id" v-memo="[item.id, item.value]"><td>{{ item.name }}</td><td>{{ item.value }}</td></tr></table>
      </template>
      
  • React18优化
    • useMemo缓存计算结果,useCallback缓存事件处理函数;
    • React.memo包装纯组件,避免父组件重渲染导致子组件无用渲染;
    • useDeferredValue延迟更新非紧急UI(如搜索结果列表):
      function Search() {const [query, setQuery] = useState('');const deferredQuery = useDeferredValue(query); // 延迟更新查询词const results = useMemo(() => searchData(deferredQuery), [deferredQuery]); // 基于延迟查询词计算结果return (<div><input value={query} onChange={(e) => setQuery(e.target.value)} /><ResultsList results={results} /></div>);
      }
      
(2)事件处理优化:避免“交互延迟”
  • 防抖节流:高频事件(如输入、滚动、resize)必须加防抖节流,减少函数执行次数:
    // 输入框搜索防抖(500毫秒内仅执行1次)
    import { debounce } from 'lodash-es';
    const handleSearch = debounce((value) => {// 调用搜索接口
    }, 500);// 滚动事件节流(每200毫秒执行1次)
    import { throttle } from 'lodash-es';
    window.addEventListener('scroll', throttle(() => {// 处理滚动逻辑
    }, 200));
    
  • 事件委托:列表项的点击事件用“事件委托”绑定到父元素,避免为每个列表项绑定事件:
    // 事件委托优化:父元素绑定1次事件,处理所有子元素点击
    const list = document.getElementById('list');
    list.addEventListener('click', (e) => {if (e.target.tagName === 'LI') {const itemId = e.target.dataset.id;// 处理列表项点击逻辑}
    });
    

三、性能监控与持续优化:让性能“可度量、可追溯”

优化不是“一劳永逸”的工作,需建立“监控→告警→迭代”的持续优化机制,确保线上性能长期达标。

3.1 真实用户性能数据(RUM)上报

通过Web Vitals API采集线上真实用户的性能数据,上报到监控平台(如Sentry、阿里云ARMS),了解不同地区、不同设备的性能表现:

// 上报Core Web Vitals到监控平台
import { getCLS, getFID, getLCP, getINP, getTTFB } from 'web-vitals';function reportWebVitals(metric) {// 上报数据格式:指标名称、值、设备信息、页面URL等const data = {name: metric.name,value: metric.value,rating: metric.rating, // 评级(good/needs-improvement/poor)device: navigator.userAgent,url: window.location.href,timestamp: Date.now(),};// 用Beacon API异步上报(不阻塞页面卸载)if (navigator.sendBeacon) {navigator.sendBeacon('/api/performance/report', JSON.stringify(data));} else {fetch('/api/performance/report', {method: 'POST',body: JSON.stringify(data),keepalive: true, // 确保页面卸载前完成上报});}
}// 初始化监控
getCLS(reportWebVitals);
getFID(reportWebVitals);
getLCP(reportWebVitals);
getINP(reportWebVitals);
getTTFB(reportWebVitals);

3.2 性能告警与归因

  • 告警配置:在监控平台设置阈值告警,如“LCP>4秒的用户占比>5%”“INP>500毫秒的用户占比>10%”时触发邮件/钉钉告警;
  • 问题归因:收到告警后,用以下工具定位原因:
    1. Chrome DevTools Performance:录制用户操作,查看主线程任务、资源加载时序,定位长任务来源;
    2. Lighthouse CI:集成到CI/CD流程,每次代码提交自动运行Lighthouse,对比性能变化,定位“哪次提交导致性能下降”;
    3. Sentry Performance:查看性能问题与错误的关联(如慢接口导致的页面白屏),同时查看用户设备、地区分布,判断是否是特定环境问题。

3.3 持续优化迭代

建立“性能优化迭代表”,定期(如每月)分析监控数据,迭代优化方案:

优化迭代优化时间优化内容优化前指标(LCP/INP/CLS)优化后指标(LCP/INP/CLS)覆盖用户
V1.02024.03核心图片预加载、CSS拆分4.8s/580ms/0.352.8s/320ms/0.12100%
V2.02024.04JS懒加载、事件防抖2.8s/320ms/0.122.2s/180ms/0.08100%
V3.02024.05合成层优化、字体预加载2.2s/180ms/0.081.8s/120ms/0.06100%

四、实战案例:中型电商首页性能优化(从68分到92分)

以某中型电商首页(Vue3+Vite+TS)为例,完整拆解优化过程,让理论落地:

4.1 优化前状态(Lighthouse 11.0评分68分)

  • 核心问题:
    1. LCP=4.8秒(首屏Banner图未预加载,CDN响应慢);
    2. INP=580毫秒(商品列表渲染无节流,滚动事件无防抖);
    3. CLS=0.35(商品图片未设宽高比,动态广告弹窗无占坑);
    4. TBT=380毫秒(首页JS未拆分,单个JS体积1.2MB)。

4.2 优化步骤(分3轮迭代)

第一轮:解决核心指标不达标(LCP、CLS)
  1. 预加载首屏Banner图(preload+fetchpriority="high");
  2. 商品图片用aspect-ratio=3/4(电商商品图常用比例)占坑;
  3. 动态广告弹窗提前创建隐藏容器(visibility: hidden),避免插入时偏移;
  4. 内联首屏CSS(12KB),非首屏CSS异步加载。
  • 优化后:LCP=2.8秒,CLS=0.12,评分提升至78分。
第二轮:优化交互流畅度(INP、TBT)
  1. 商品列表用v-memo缓存,滚动时仅渲染可视区域(用vue-virtual-scroller实现虚拟列表);
  2. 首页JS拆分为“核心逻辑(380KB)”“商品列表(220KB)”“用户中心(180KB)”3个chunk,非核心chunk懒加载;
  3. 搜索输入框加500毫秒防抖,滚动事件加200毫秒节流;
  4. 轮播图用transform实现动画,启用合成层优化。
  • 优化后:INP=180毫秒,TBT=120毫秒,评分提升至86分。
第三轮:细节优化(提升至92分)
  1. 启用HTTP/3 CDN,资源加载时间减少25%;
  2. 字体用font-display: swap,预加载核心字体(28KB);
  3. 接口请求加缓存(Cache-Control: max-age=300),减少重复请求;
  4. 生产环境删除console/debugger,JS压缩级别提升至3级。
  • 优化后:LCP=1.8秒,INP=120毫秒,CLS=0.06,评分92分,所有指标达到优秀标准。

五、总结与2025年性能优化趋势

前端性能优化的核心不是“追求极致的速度”,而是“在用户体验、开发成本、业务需求之间找到平衡”。通过本文的方法论,你可以:

  1. 建立“指标驱动”的优化思维,避免盲目调优;
  2. 掌握“全链路优化”的实战方案,覆盖加载、解析、渲染、运行时;
  3. 搭建“持续监控”的体系,确保线上性能长期达标。

展望2025年,前端性能优化将呈现3大趋势:

  1. AI驱动的自动优化:工具(如Vite 6.0、Webpack 6.0)将集成AI算法,自动识别性能瓶颈并生成优化方案;
  2. Web Assembly(Wasm)优化:复杂计算(如数据可视化、视频处理)将迁移到Wasm,释放主线程资源;
  3. 边缘计算与Server Components:React Server Components、Vue Server Components将普及,核心组件在边缘节点渲染,进一步降低客户端加载压力。

性能优化是一场“持久战”,但只要建立系统性思维,就能让你的产品在“速度”与“体验”上持续领先——毕竟,用户永远会选择“更快、更流畅”的产品。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/920249.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/920249.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kafka面试精讲 Day 1:Kafka核心概念与分布式架构

【Kafka面试精讲 Day 1】Kafka核心概念与分布式架构 在“Kafka面试精讲”系列的第1天&#xff0c;我们将深入解析Apache Kafka最根本的基石——核心概念与分布式架构。作为大数据和后端开发领域面试中的“必考题”&#xff0c;诸如“Kafka是如何实现高吞吐量的&#xff1f;”、…

github copilot学生认证教程,免费使用两年Copilot Pro!!(避免踩坑版)

先放结果&#xff0c;本人是先后申请了三次&#xff1a; 1、第一次直接用的学生证&#xff0c;打开对着电脑摄像头直接拍了一张&#xff0c;失败了&#xff0c;如下&#xff0c;理由是没有开启双重认证&#xff01;&#xff01;&#xff0c;并且学生证内页没有学校名称&#x…

Shiro介绍以及一个原始例子

目录基本功能核心组件应用场景优势Shiro 核心工作流程&#xff08;以 Web 应用登录为例&#xff09;一个例子【验证&#xff0c;授权]:Shiro 是一个强大且易用的 Java 安全框架&#xff0c;提供了 身份验证、授权、加密和会话管理等功能&#xff0c;可帮助开发人员轻松确保应用…

AI-调查研究-59-机器人 行业职业地图:发展路径、技能要求与薪资全解读

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; AI炼丹日志-31- 千呼万唤始出来 GPT-5 发布&#xff01;“快的…

LeetCode算法日记 - Day 22: 提莫攻击、Z字形变换

目录 1. 提莫攻击 1.1 题目解析 1.2 解法 1.3 代码实现 2. Z字形变换 2.1 题目解析 2.2 解法 2.3 代码实现 1. 提莫攻击 495. 提莫攻击 - 力扣&#xff08;LeetCode&#xff09; 在《英雄联盟》的世界中&#xff0c;有一个叫 “提莫” 的英雄。他的攻击可以让敌方英…

Unity笔记(七)——四元数、延迟函数、协同程序

写在前面&#xff1a;写本系列(自用)的目的是回顾已经学过的知识、记录新学习的知识或是记录心得理解&#xff0c;方便自己以后快速复习&#xff0c;减少遗忘。主要是C#代码部分。六、四元数欧拉角具有旋转约定&#xff0c;也就是说&#xff0c;无论你调整角度的顺序是什么&…

用大语言模型提升语音翻译:一种全新的端到端方法

用大语言模型提升语音翻译:一种全新的端到端方法 在语音翻译领域,如何将说话内容快速准确地转化为另一种语言,一直是研究者们关注的焦点。随着大语言模型(LLM)的兴起,我们迎来了一个全新的机遇:利用LLM的强大能力,来提升语音翻译系统的性能。最近,一项名为“End-to-E…

freeModbus TCP收发数据一段时间后,出现掉线情况(time out问题)

话说这个是真难找啊。我仅仅发表我找到的问题。我在接收几十到几百次数据的时候&#xff0c;会出现连接超时&#xff0c;也就是time out。而且ping也ping不通。也就是说明lwip出了问题。首先我先介绍modbus的这个流程。首先是函数eMBTCPInit( MB_TCP_PORT_USE_DEFAULT )我们进入…

Linux Web环境一键安装脚本集合(非docker)

✨重磅&#xff01;盹猫的个人小站正式上线啦&#xff5e;诚邀各位技术大佬前来探秘&#xff01;✨ —— 专为开发者打造的宝藏基地&#xff0c;等你来探索&#xff01; 这里有&#xff1a; &#x1f525; 硬核技术干货&#xff1a;编程技巧、开发经验、踩坑指南&#xff0c;带…

原生安卓#基于Android的爱好者分享论坛的设计与实现/基于Android在线论坛系统app/基于Android的论坛系统的设计与实现的设计与实现

原生安卓#基于Android的爱好者分享论坛的设计与实现/基于Android在线论坛系统app/基于Android的论坛系统的设计与实现的设计与实现

基于Android的超市购物系统的设计与实现、基于android的在线商城app/基于android的在线销售系统app#android

基于Android的超市购物系统的设计与实现、基于android的在线商城app/基于android的在线销售系统app#android

C++14 到 C++20 全面解析:语言新特性、标准库演进与实战案例

一、前言C 作为一门历史悠久且不断演进的编程语言&#xff0c;在 C11 之后进入了“现代化”的快车道。C11 被称为 C 的第二次诞生&#xff0c;引入了 lambda 表达式、智能指针、右值引用、并发支持等革命性特性。然而&#xff0c;C 的标准化进程并没有止步于此。C14、C17 和 C2…

HarvardX TinyML小笔记2(番外1:TFLite)

1 原理 tflite就是Tensorflow的轻量化模型&#xff0c;核心处理就是量化和剪枝。不过这部分目前是在Tensorflow中封装了&#xff0c;所以这里也不会去看细节&#xff0c;主要就是看看原理和使用方法。 量化Quantization&#xff0c;其实就是把原来的float32换成int8。这样一个…

向量库Qdrant vs Milvus 系统详细对比

Qdrant vs Milvus 系统详细对比 一、它们是什么&#xff08;定位&#xff09; 两者都是专门做向量相似搜索的数据库&#xff1a;支持ANN&#xff08;近似最近邻&#xff09;检索、向量结构化过滤、REST/gRPC 接口与官方SDK&#xff1b;Milvus 官方也定位为"面向GenAI、可…

适配欧拉操作系统

背景 客户指定服务器环境欧拉操作系统&#xff0c;版本&#xff1a;6.6.0-72.0.0.76.oe2403sp1.x86_64 需要把Java 应用以及各种中间件部署在欧拉操作系统上。 问题适配MySQL 1.1 编译报错 mysql-5.7.40-el7-x86_64.tar.gz版本在CentOS7环境安装正常 当前欧拉环境直接使用CentO…

学习spring Bean的生命周期

完整项目结构 ├── pom.xml └── src/├── main/│ ├── java/│ │ └── com/│ │ └── zhang/│ │ ├── bean/│ │ │ ├── Address.java│ │ │ ├── MyBeanPostProcessor.java│ │ …

elasticsearch 7.17.23 使用spring data es实现高亮分页,scroll查询分页查询

一 介绍 1.1 工程结构 1.2 启动elasticsearch服务 1.3 高亮分页 DeepSeek 代码 效果&#xff1a; 1.4 scroll分页 代码 2.效果 后台日志 1.5 完整代码 https://gitee.com/jurf-liu/es-2.17.x-demo.git

onlyoffice整合springboot+vue实现文档在线编辑保存

项目上需要用到在线word、excel文档编辑功能&#xff0c;通过游览器在线打开一个远程的word文档编辑保存&#xff0c;这里记录下整合思路。 onlyoffice简介 ONLYOFFICE 是一款开源的办公套件&#xff0c;提供了一系列在线文档编辑和协作工具&#xff0c;适用于团队和个人使用…

Linux笔记10——shell编程基础-4

补充$#——取参数个数“$n”,有值取值&#xff0c;无值取空字符&#xff0c;一般都会加引号&#xff0c;在某些情况下避免报语法错误一、read接收键盘输入[rootlocalhost ~]# cat demo.sh #!/bin/bash echo -n "请输入你的姓名&#xff1a;" read nameecho "你…

(Redis)过期删除策略

1. 背景Redis 支持为 Key 设置过期时间&#xff08;TTL&#xff09;&#xff0c;让数据在一定时间后自动失效。 例如&#xff1a;SET session:1001 "userA" EX 60 # 60 秒后过期但是问题来了&#xff1a;Key 到期后&#xff0c;Redis 什么时候、如何删除它&#xf…