Vue3 Suspense完全指南:异步组件与async setup的优雅加载方案
刚接触 Vue3 的同学大概率会在官方文档里看到Suspense这个组件但文档里通常只写了一句“实验性特性”然后就没了。我最初也是这样看完文档一头雾水直到在一个后台管理系统的复杂页面里遇到“多个异步请求 多个异步子组件同时加载”的场景才真正把它用起来。这篇文章就围绕 Vue3 的Suspense组件把它的使用姿势、背后原理、踩过的坑和替代方案一次性说清楚适合正在做 Vue3 项目、尤其是刚迁移到组合式 API 的同学。1. Suspense到底解决什么问题从异步组件和异步依赖说起1.1 没有Suspense之前我们是怎么熬过来的先回忆一下 Vue2 / Vue3 早期的异步渲染方案。假设一个详情页顶部是用户信息卡中间是订单列表底部是推荐商品三个区域分别对应三个异步请求。传统做法是给每个区域配一个loading布尔值created里发起三个请求每个请求回来之后独立修改自己的loading模板里写三个v-if/v-else。这种方案在业务简单时没问题一旦子组件内部还有异步逻辑比如子组件里又调了接口、又动态 import 了别的组件loading状态就会变得分散且难以管理。你很难知道“整个页面到底什么时候才算真正加载完成”有时候用户会看到页面东一块西一块地蹦出来体验很差。还有一个更隐蔽的场景父组件在onMounted里请求数据拿到数据后通过props传给子组件子组件内部还要根据这份数据再去请求第二个接口。这个过程中父组件需要同时维护“父数据是否就绪”和“子数据是否就绪”两个状态代码一多就乱。Suspense要解决的就是这个问题它可以作为一棵组件树的“异步边界”把内部所有异步依赖统一管理。只要边界内的任意一个异步依赖还没完成它就一直展示fallback比如 loading 状态等所有异步依赖全部就绪再一次性渲染真正的内容。1.2 Suspense在Vue3里的特殊地位Vue3 官方文档把 Suspense 标记为“实验性特性”这说明它的 API 设计还没有完全定稿未来版本可能会调整。但即便如此它在社区里已经被大量用于异步组件和异步setup的场景因为确实好用。Suspense 在 Vue3 中能“监听”两类异步依赖第一类是异步组件也就是通过defineAsyncComponent创建的组件。这类组件在加载过程中会处于 pending 状态Suspense 能感知到。第二类是setup函数返回 Promise 的组件。在组合式 API 下setup可以是async函数比如这样async function setup() { const data await fetch(/api/user).then(res res.json()) return { data } }只要这个组件的setup是异步的它在 pending 期间也会被 Suspense 捕获。这里要特别强调一下reactive、ref、computed这些响应式 API 本身不会触发 SuspenseSuspense 只关心“异步渲染依赖”。所以如果你只是想在普通组件里管一个 loading 变量用不上 Suspense别硬用。1.3 适合使用Suspense的典型场景从我的实际经验看Suspense 最适合以下三类场景页面级聚合加载一个页面由多个互相没有依赖关系的异步组件组成希望统一等待再一次性展示。异步 setup 的组件组件初始化本身就依赖接口数据用async setup可以让模板逻辑更直白不用在组件里再套一层 loading。嵌套异步边界父子组件各自有异步依赖但希望子组件先加载完父组件再展示这正好用嵌套 Suspense 表达。不适合的场景也明确一下如果你只有一个异步请求且不需要等待其他组件直接用v-if loading反而更轻量如果你的异步数据需要缓存、取消、竞态处理Suspense 本身不提供这些能力需要额外方案。看到这里你应该明白了Suspense 不是“让异步组件能用”而是“让异步加载过程可以被统一声明式管理”。它把“异步渲染”这件事从命令式的 loading 变量里解放出来这是它最大的价值。2. 基础用法与核心细节从“能用”到“用好”2.1 最简单的异步组件加载先看一个最基础的用法动态导入一个组件配合 Suspense 显示加载状态。template Suspense template #default UserProfile / /template template #fallback div classloading用户信息加载中.../div /template /Suspense /template script setup import { defineAsyncComponent } from vue const UserProfile defineAsyncComponent(() import(./UserProfile.vue)) /scriptdefineAsyncComponent创建的组件会被 Suspense 识别。如果异步组件加载失败Suspense 本身不提供错误处理需要在defineAsyncComponent里配置onError回调或者在父组件通过onErrorCaptured捕获。有个细节很容易被忽略如果异步组件加载完成后组件内部又派发了异步请求Suspense不会等待这个请求。Suspense 只关心“组件是否加载完成”不关心组件内部的业务数据是否就绪。要等待组件内部的异步数据必须让组件自己变成异步组件也就是setup返回 Promise。2.2 让setup变成异步async setup的写法与限制这是 Suspense 比较进阶的用法也是很多同学觉得“反直觉”的地方。默认情况下Vue 组件的setup是同步执行的如果你写成async setupVue 会把这个组件标记为异步组件组件在等待setup返回的 Promise 完成之前不会渲染。例子script setup const res await fetch(/api/user/info) const userInfo await res.json() /script template div{{ userInfo.name }}/div /template注意这里没有用ref包裹userInfo因为整个setup是异步的在 Promise resolve 之后模板才会渲染所以这份数据天然是稳定的。如果你在异步setup里用了ref也完全没有问题响应式依然生效但要注意在await之前的同步代码里ref的初始值是拿不到实际数据的。还有一点必须提醒async setup会让组件的渲染时机被推迟。如果你在这个组件的onMounted里访问 DOM看起来没问题但如果你在父组件里用ref访问这个子组件实例在 Suspense 完成之前拿到的可能是null因为实例还没创建完。解决办法是配合 Suspense 的#default插槽来完成后再访问或者在子组件内部通过onMounted处理 DOM 逻辑。2.3 多个异步依赖的并发等待Suspense 一个很爽的场景是多个异步子组件并行等待全部完成后一次性展示。template Suspense template #default div classdashboard UserCard / OrderList / RecommendGoods / /div /template template #fallback div classpage-loading页面加载中.../div /template /Suspense /template script setup import { defineAsyncComponent } from vue const UserCard defineAsyncComponent(() import(./UserCard.vue)) const OrderList defineAsyncComponent(() import(./OrderList.vue)) const RecommendGoods defineAsyncComponent(() import(./RecommendGoods.vue)) /script这段代码里三个组件会同时开始加载而不是串行等待。Suspense 内部会并行追踪所有的异步依赖等全部 resolve 之后统一渲染#default的内容。这一点比手动维护三个 loading 状态优雅得多。需要额外说一句这里的“并行”是组件加载层面的并行不是接口请求层面的并行。如果组件内部在setup里用await fetch那么这些请求也是同时发起的因为每个组件的setup都在同一时间开始执行。如果你希望某些请求串行那需要在组件内部的setup里手动控制顺序。2.4 嵌套Suspense与命名插槽组件树层级深的时候可能需要局部优先显示这时候可以嵌套 Suspense。比如父页面有一个整体加载状态但其中某个区块可以先展示Suspense template #default div Suspense template #default SlowComponent / /template template #fallback div慢组件加载中.../div /template /Suspense FastComponent / /div /template template #fallback div页面加载中.../div /template /Suspense嵌套 Suspense 的规则是内层 Suspense 会先等待自己的异步依赖完成完成后渲染自己的#default此时外层 Suspense 感知到这个组件的 pending 结束了继续等待其他依赖。所以如果你想让某个组件“不等”就把它的异步过程包在独立的 Suspense 里内层的 pending 不会阻塞外层等待其他异步依赖。在 Vue3 的 Suspense 中#default和#fallback都是命名插槽默认插槽的写法是被支持的。注意一个坑Suspense 的#default插槽里只允许一个根节点如果有多个根节点Vue 会警告且可能无法正确追踪异步边界。实际开发中我习惯在#default里包一层div。2.5 Suspense与defineAsyncComponent的配合细节defineAsyncComponent有自己独立的配置项比如loadingComponent和delay但它们和 Suspense 的fallback是互斥的。如果你用了 Suspense异步组件的loadingComponent不会生效因为 Suspense 接管了加载状态的展示。举个例子const AsyncComp defineAsyncComponent({ loader: () import(./MyComponent.vue), loadingComponent: LoadingComp, // 在Suspense内不会生效 delay: 200, })放在 Suspense 里loadingComponent会被忽略Suspense 的fallback才是最终展示内容。这不算 bug更像设计上的取舍。我的建议是既然用了 Suspense就别在defineAsyncComponent里配 loading 了把 loading 统一放在 Suspense 的 fallback 里整个页面的加载状态会更可控。另外defineAsyncComponent的timeout超时配置在 Suspense 内依然生效。如果异步组件加载超时会触发onErrorSuspense 会抛出错误需要你在上层处理否则页面会白屏。这个问题我在第 3 部分会详细说。3. 实操过程中最容易踩的坑与排查实录3.1 坑一async setup中的副作用重复执行这是我第一次在项目里用 Suspense 时踩到的。有一个组件setup里直接await请求数据然后把这个请求放到了watchEffect里结果发现组件每次切换进入时都会多发出请求。原因在于 Suspense 在组件重新渲染、重新挂载时setup会重新执行如果setup内部有副作用比如发起请求、注册监听器、启动定时器这些副作用都会被重复执行。更关键的是Suspense 在某些情况下会“重新渲染”已经 completed 的边界导致组件被卸载重挂。解决办法把请求逻辑放到watchEffect或onMounted里并做好清理。如果请求结果只依赖某些参数用computed或watch代替直接在setup顶层await。配合keep-alive时特别注意onActivated和onDeactivated的调用时机避免请求重复。例如const userId ref(1) const userInfo ref(null) watchEffect(async () { const res await fetch(/api/user/${userId.value}).then(r r.json()) userInfo.value res })这样setup本身是同步的Suspense 不会等待它。但如果你的场景要求 Suspense 必须等待这个请求那就只能在顶层await同时用shallowRef或普通变量存储避免响应式带来的额外开销。3.2 坑二Suspense永远pending的几种可能一个很伤脑筋的现象是Suspense 明明写了但页面一直显示 fallback控制台也没有报错。我排查过几次总结出几个高频原因。第一异步组件加载失败但没有错误处理。如果import()网络错误Promise rejectSuspense 就永远处于 pending。此时需要给defineAsyncComponent加onError或者父组件监听onErrorCaptured。第二嵌套组件中某个 setup 异步永远不 resolve。比如在async setup里写了个while(true)或者某个请求被全局拦截器卡住。这种情况下浏览器控制台能看到挂起的请求排查起来相对容易。第三异步依赖在 resolved 之后又被重新创建。这种情况比较隐蔽通常是v-if加在了 Suspense 内部导致组件树反复切换每次切换 Suspense 都会重新等待异步依赖。官方建议 Suspense 的子节点最好保持稳定不要在#default里用动态v-if控制异步组件的挂载。3.3 坑三事件捕获与错误处理边界Suspense 本身没有错误处理能力它只会等所以一旦异步依赖 reject你需要自己兜底。我的做法是在 Suspense 外层包一个onErrorCaptured把错误直接弹出来script setup import { onErrorCaptured } from vue onErrorCaptured((err) { // 统一错误上报 console.error(Suspense error:, err) return false // 阻止继续向上传播 }) /script注意return false表示错误已被处理不会再向上传播如果返回true或不写错误会继续冒泡可能导致控制台一堆未捕获异常。在项目里我会把错误信息存到一个ref里然后展示一个错误页。另一个容易忽略的点异步组件在defineAsyncComponent里配置的onError只能捕获loader本身的错误比如网络错误、动态 import 失败如果错误发生在组件内部的setup里比如await fetch抛出异常这个错误会传到外层onErrorCaptured而不是defineAsyncComponent的onError。所以最好是两层都做兜底。3.4 坑四和 keep-alive、transition 打架在后台管理系统中页面切换频繁我习惯用KeepAlive缓存组件。Suspense 和 KeepAlive 同时使用时有一些不太直观的行为。比如KeepAlive Suspense template #default AsyncPage / /template template #fallback Loading / /template /Suspense /KeepAlive这样写的问题是Suspense 的异步依赖在缓存命中后可能不会再次等待导致已经缓存的页面重新渲染时出现空白或状态错乱。Vue 官方其实提供了专门的SuspenseKeepAlive配合姿势需要把KeepAlive放在 Suspense 内部并给Suspense加key或者把KeepAlive放在默认插槽里。我更推荐的做法是用 KeepAlive 包裹页面级的异步组件而把 Suspense 放在更靠近异步依赖的位置。比如Suspense KeepAlive component :iscurrentView / /KeepAlive /Suspense这样 Suspense 只负责等待currentView这个异步组件本身缓存和异步边界互不干扰。至于TransitionSuspense 和 Transition 一起用时容易出现动画异常因为 Suspense 完成渲染时会立即插入 DOMTransition 的进入动画可能来不及触发。建议给Transition加上appear属性确保首次渲染也能有动画。3.5 坑五把所有数据请求都塞进Suspense很多同学学了 Suspense 后喜欢把所有的异步操作都往async setup里塞结果发现页面变慢了甚至出现重复请求。这里要澄清一个概念Suspense 适合组件初始化依赖的异步数据但不适合用户交互触发的异步数据。比如用户在列表页点击“筛选”按钮后触发的请求这个请求不应该写在async setup里因为async setup只在组件创建时执行一次用户交互触发的请求应该用ref 普通函数处理页面显示 loading 也是局部的不需要 Suspense 参与。如果你把交互请求也塞进 Suspense每次点击筛选都会触发整个 Suspense 重挂载页面会闪一下 loading体验非常糟糕。这个坑我踩过一次后来不得不把交互请求从 setup 里搬出来才解决。3.6 常见问题速查表现象可能原因解决思路页面一直显示 fallback异步加载失败且无错误处理配置 onError 或 onErrorCapturedasync setup 被重复执行Suspense 重挂载导致 setup 重新运行将副作用移到 watchEffect / onMountedSuspense 内动态 v-if 导致闪烁子组件树被反复创建保持 Suspense 子节点稳定动态挂载移出loadingComponent 不生效Suspense 接管了加载状态统一用 fallback 表达加载缓存页面数据错乱KeepAlive 与 Suspense 嵌套顺序不对将 KeepAlive 放在 Suspense 内部或组件层面缓存多次点击触发重复请求交互请求被写进 async setup交互请求放普通函数中处理这些坑说起来都很有共鸣如果你也遇到了类似情况可以先对照表格看一遍大概率能省下半天排查时间。4. Suspense的边界与替代方案什么时候别用它4.1 实验性状态带来的升级风险说到底Suspense 是 Vue3 里一个“半官方”的能力它的 API 设计至今还标着实验性。这意味着你升级 Vue 小版本时可能会遇到行为变化。Vue 官方团队在 3.2、3.3、3.4 中都对 Suspense 有过修复和调整但一直没转正。我建议在项目里把 Suspense 作为“局部优化手段”而不是全局架构依赖。比如只用在页面级异步组件的加载体验上避免在通用组件库里大规模使用否则未来 Vue 升级你可能要花大量时间适配。4.2 什么时候用 v-if loading 反而更好Suspense 不是万能的很多场景下简单的v-if loading才是更稳的方案。如果你的异步请求只在组件挂载后触发且不需要等待子组件的异步状态那直接用ref控制就不错template div v-ifloading加载中.../div div v-else{{ data }}/div /template script setup import { ref, onMounted } from vue const loading ref(true) const data ref(null) onMounted(async () { data.value await fetch(/api/data).then(res res.json()) loading.value false }) /script这种写法简单、可控、兼容性最好也没有实验性风险。Suspense 解决的痛点是“多个异步依赖的统一等待”如果你只有一两个异步点手动管理完全够用。还有一类场景异步数据需要竞态控制。比如搜索框输入每次输入都触发请求后一次请求比前一次先返回页面显示了旧数据。Suspense 完全没有竞态处理能力这种情况还是要用 AbortController 或者忽略过期的 Promise。4.3 更灵活的异步状态封装思路如果你想要 Suspense 的“声明式等待”体验又不希望依赖实验性 API可以自己封装一个简单的异步状态管理函数。思路是用一个ref保存promise再利用 Vue3 的响应式和计算属性做分支渲染。下面是一个基础封装// useAsync.js import { ref } from vue export function useAsync(asyncFn) { const loading ref(false) const error ref(null) const data ref(null) async function run(...args) { loading.value true error.value null try { data.value await asyncFn(...args) } catch (e) { error.value e } finally { loading.value false } } return { loading, error, data, run } }然后在组件里这样用script setup import { useAsync } from /utils/useAsync const { loading, error, data, run } useAsync(fetchUserList) run() /script template div v-ifloading加载中.../div div v-else-iferror加载失败/div div v-else{{ data }}/div /template这种方案虽然没有 Suspense 优雅但完全稳定可控也能覆盖 80% 的业务场景。如果你是做长期维护的项目我更建议先用这种方案等 Suspense 正式转正再考虑迁移。4.4 在Vue生态中的现实定位在 Vue Router 和 Pinia 的官方文档里都能找到 Suspense 的身影。比如 Vue Router 的路由懒加载组件配合 Suspense 可以做到路由级别加载状态Pinia 的 store 初始化如果是异步的也可以在 Suspense 里等待。但这些都是“锦上添花”并非必须。如果你正在开发后台管理系统用 Vue3 Element Plus 这类 UI 框架Suspense 不会影响 UI 框架的使用但要注意部分 UI 框架的弹窗、消息组件可能会把内容渲染到 body 下这些内容不在 Suspense 管理范围内不会阻塞 Suspense。另外如果你在用script setup语法需要注意 Suspense 在编译宏层面的支持情况。defineAsyncComponent、async setup都是运行时能力和编译宏没有冲突可以放心使用。最后再分享一个我自己的习惯在项目里使用 Suspense 时我会在团队文档里明确标注“这是一个实验性特性使用前要评估升级影响”并且只允许在新页面的局部加载场景里使用。这样即使未来 Vue 升级导致行为变化受影响的代码也有限不至于牵一发动全身。以上这些内容是我在使用 Vue3 Suspense 过程中总结出来的核心经验。如果你现在正准备用它建议先从小页面、小场景开始尝试别一上来就把整个项目的异步加载都交给它。等你体会到 fallback 和 default 之间流畅切换的感觉再逐步扩大使用范围会发现 Vue3 的异步渲染其实可以很优雅。

相关新闻

Java线程start流程深度剖析:从源码到生命周期状态转移(YCBlogs线程知识系列)

Java线程start流程深度剖析:从源码到生命周期状态转移(YCBlogs线程知识系列)

教程技术博客文档 【免费下载链接】YCBlogs 技术博客笔记大汇总,包括Java基础,线程,并发,数据结构;Android技术博客等等;常用设计模式;常见的算法;网络协议知识点;部分fl…

2026/10/10 11:34:49 阅读更多 →
express-validator 架构解析:中间件式声明校验的执行原理与内部工作流程

express-validator 架构解析:中间件式声明校验的执行原理与内部工作流程

后端 【免费下载链接】express-validator An express.js middleware for validator.js. 项目地址: https://gitcode.com/gh_mirrors/ex/express-validator 点击查看 免费下载 express-validator 是一个基于 Express.js 的校验中间件库,它在请求进入路由…

2026/10/10 11:34:49 阅读更多 →
Android LayerDrawable 与 Drawable.Callback 深度剖析:回调调用链、View 背景切换与一个经典 Bug 的修复

Android LayerDrawable 与 Drawable.Callback 深度剖析:回调调用链、View 背景切换与一个经典 Bug 的修复

文档教程知识库 【免费下载链接】android-tech-frontier 【停止维护】一个定期翻译国外Android优质的技术、开源库、软件架构设计、测试等文章的开源项目 项目地址: https://gitcode.com/gh_mirrors/an/android-tech-frontier 点击查看 免费下载 本篇技术指南以 is…

2026/10/10 11:34:49 阅读更多 →

最新新闻

开源一个能跑通的代驾系统:Spring Boot + Netty 实时派单、计价引擎的落地复盘

开源一个能跑通的代驾系统:Spring Boot + Netty 实时派单、计价引擎的落地复盘

最近把之前做的一套代驾服务系统整理开源了,涵盖用户下单、司机抢单、实时定位、计价结算、在线支付的完整闭环。这篇不讲 PPT 架构,直接挑三个真正花了时间的难点,结合源码聊聊是怎么落地的、以及现在回看有哪些坑。 开源地址放在文末&#…

2026/10/10 12:20:57 阅读更多 →
圆满收官|500名选手齐聚!2026「凯瑞麟杯」GPCC广州赛区决赛,奔赴大湾区匹克球荣耀

圆满收官|500名选手齐聚!2026「凯瑞麟杯」GPCC广州赛区决赛,奔赴大湾区匹克球荣耀

9月2627日,2026「凯瑞麟杯」GPCC 粤港澳大湾区匹克球城市挑战赛・广州赛区城市决赛,在白云区永旺梦乐城POPO网球匹克球运动中心圆满收官。 本届赛事汇聚约500名选手同台竞技,是近年粤港澳大湾区规模较大的匹克球专业赛事。赛事以“上场&#…

2026/10/10 12:20:57 阅读更多 →
2026.10.9 (1)

2026.10.9 (1)

5 最长回文子串class Solution:def longestPalindrome(self, s: str) -> str:nlen(s)left_ansright_ans0for i in range(n):lriwhile l>0 and r<n and s[l]s[r]:l-1r1if r-l-1>right_ans-left_ans:left_ansl1right_ansrfor i in range(n):liri1while l>0 and r&…

2026/10/10 12:20:57 阅读更多 →
02 | Kubernetes 部署 FastAPI LLM Serving 并接入 Ollama

02 | Kubernetes 部署 FastAPI LLM Serving 并接入 Ollama

1. 总览 基于 Kubernetes 部署 FastAPI LLM Serving&#xff0c;通过 Kubernetes Service 和 Ingress 对外提供 API&#xff0c;并通过 host.docker.internal 访问 MacBook 上的 Ollama。 核心调用链&#xff1a; Client → Kubernetes Ingress → Kubernetes Service → FastA…

2026/10/10 12:20:57 阅读更多 →
SemIf 实战避坑:边界句误判、上下文长度、量化精度,3090 上的 5 个坑

SemIf 实战避坑:边界句误判、上下文长度、量化精度,3090 上的 5 个坑

SemIf 实战避坑&#xff1a;边界句误判、上下文长度、量化精度&#xff0c;3090 上的 5 个坑 【免费下载链接】SemIf-OpenJev Semantic ifs from open models, on a 3090 at home. Independent; not affiliated with Jev or TypeSafe. 项目地址: https://gitcode.com/gh_mirr…

2026/10/10 12:20:56 阅读更多 →
Rust trait 完全指南:从基础语法到零成本抽象工程实践

Rust trait 完全指南:从基础语法到零成本抽象工程实践

1. Rust 的 trait&#xff1a;行为契约&#xff0c;不只是接口在 Rust 里&#xff0c;trait 是个绕不过去的核心概念。我可以直接说&#xff1a;如果你理解了 trait&#xff0c;你就理解了 Rust 设计哲学的一半。剩下的一半是所有权和生命周期。我第一次接触 trait 的时候&…

2026/10/10 12:19:56 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起&#xff1a;为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念&#xff0c;很多人会觉得它离自己很远——不就是天上的星星怎么转吗&#xff1f;但如果你正在做航天任务规划、遥感数据接收、星座设计&#xff0c;甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起&#xff1a;为什么你的代码里到处都是重复逻辑刚入行那会儿&#xff0c;我写过一个用户管理模块&#xff0c;注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么&#xff0c;能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介&#xff1a;这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目&#xff0c;以Boss直聘岗位数据为对象&#xff0c;适合用作毕业设计、课程设计或期末大作业。资源包共38个文件&#xff0c;约246KB&#xff0c;以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:25 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →