后端使用 AI 开发前端速成:第九期:调试排错与性能优化
·
第九期:调试排错与性能优化
本期目标:遇到 bug 不慌张,能用 DevTools + AI 定位并解决问题
核心理念:调试是编程的一部分,AI 可以辅助定位,但最终决策必须是你
目录
第一章:Chrome DevTools 核心面板
1.1 四大核心面板
| 面板 | 快捷键 | 用途 | 后端工程师类比 |
|---|---|---|---|
| Elements | Ctrl+Shift+C | 看 DOM 结构、临时改样式 | 查看页面 HTML |
| Console | Esc | 看报错、console.log 调试 | 日志输出 |
| Network | Ctrl+Shift+E | 看接口请求/响应 | API 调用追踪 |
| Application | - | 看 LocalStorage、Cookie | 缓存/会话存储 |
1.2 Network 面板使用技巧
1. 过滤接口:点击 XHR/Fetch 只看接口请求
2. 查看请求:点击请求 → Headers(请求头)→ Payload(参数)→ Response(响应)
3. 重发请求:右键请求 → Replay XHR
4. 复制请求:右键 → Copy → Copy as cURL
1.3 Console 面板技巧
// 常用调试命令
console.log('普通日志', data)
console.table(array) // 表格形式展示数组
console.dir(object) // 展开对象所有属性
console.time('label') // 计时开始
console.timeEnd('label') // 计时结束
console.trace() // 打印调用栈
第二章:Vue 常见错误诊断
2.1 错误速查表
| 错误现象 | 原因 | 解决方案 |
|---|---|---|
| 修改数组页面不更新 | 直接通过索引修改 | 用 splice 或赋值新数组 |
| reactive 解构丢失响应式 | 解构会破坏代理 | 用 toRefs 或改用 ref |
| watch 监听不到深层变化 | 默认只监听引用 | 加 { deep: true } |
| onMounted 执行两次 | 开发环境严格模式 | 生产环境正常,忽略即可 |
| ref 解构失去响应式 | 解构 ref 对象 | 不要解构,直接用 .value |
2.2 Vue 调试技巧
使用 Vue DevTools 插件:
- 查看组件树
- 查看组件状态(ref/reactive 的值)
- 查看事件触发
- 时间旅行调试(Pinia)
第三章:React 常见错误诊断
3.1 错误速查表
| 错误现象 | 原因 | 解决方案 |
|---|---|---|
| useEffect 无限循环 | 依赖数组写错 | 用 useCallback 缓存函数 |
| 闭包陷阱 | 事件回调读取旧 state | 用函数式更新 setState(prev => …) |
| Context 性能问题 | 小更新导致大量重渲染 | 拆分 Context,或用 Zustand |
| key 使用索引 | 列表项状态错乱 | 用数据唯一 ID 作为 key |
| 状态不更新 | 直接修改对象/数组 | 使用展开运算符创建新引用 |
3.2 React 调试技巧
使用 React DevTools:
- 查看组件树和 Props
- 查看 Hooks 状态
- Profiler 面板分析性能
- 高亮更新(Highlight updates)
第四章:性能优化
4.1 列表页性能优化
| 问题 | 解决方案 | 实现方式 |
|---|---|---|
| 大数据列表卡顿 | 虚拟滚动 | vue-virtual-scroller / react-window |
| 频繁搜索请求 | 防抖/节流 | lodash debounce / throttle |
| 不必要的重渲染 | 组件拆分 + memo | Vue: v-memo / React: React.memo |
| 大图片加载慢 | 图片懒加载 | loading=“lazy” |
| 资源加载慢 | 路由懒加载 | () => import(‘./page’) |
4.2 防抖与节流
// 防抖:输入停止后 300ms 再搜索
import { debounce } from 'lodash-es'
const debouncedSearch = debounce((keyword: string) => {
fetchData(keyword)
}, 300)
// 节流:每 500ms 最多执行一次
import { throttle } from 'lodash-es'
const throttledScroll = throttle(() => {
console.log('scroll')
}, 500)
4.3 虚拟滚动
<!-- Vue + vue-virtual-scroller -->
<template>
<RecycleScroller
class="scroller"
:items="list"
:item-size="50"
key-field="id"
>
<template #default="{ item }">
<div class="item">{{ item.name }}</div>
</template>
</RecycleScroller>
</template>
第五章:内存泄漏排查
5.1 常见内存泄漏原因
| 原因 | Vue 解决 | React 解决 |
|---|---|---|
| 定时器未清理 | onUnmounted 中 clearInterval | useEffect return 中清理 |
| 事件监听未移除 | onUnmounted 中 removeEventListener | useEffect return 中移除 |
| WebSocket 未关闭 | onUnmounted 中 close | useEffect return 中 close |
| 订阅未取消 | onUnmounted 中 unsubscribe | useEffect return 中取消 |
| 闭包引用大对象 | 及时释放引用 | 及时释放引用 |
5.2 使用 Chrome DevTools 排查
1. 打开 Performance 面板
2. 点击录制按钮
3. 操作页面(如反复打开/关闭弹窗)
4. 停止录制
5. 查看 Memory 图表,如果内存只增不减 → 有泄漏
6. 使用 Memory 面板的 Heap Snapshot 对比前后差异
第六章:AI 辅助调试
6.1 给 AI 提供调试信息的 Prompt 模板
我的代码出现以下问题:
问题描述:[具体现象,如"点击搜索后页面卡死"]
错误信息:
[粘贴控制台报错]
相关代码:
[粘贴相关代码]
环境信息:
- 框架版本:[版本号]
- 浏览器:[浏览器及版本]
- 已尝试:[已尝试的解法]
请帮我定位原因并给出修复方案。
6.2 AI 调试的最佳实践
- 提供足够信息:错误信息 + 相关代码 + 环境
- 缩小范围:先确定是哪个组件/哪个函数的问题
- 逐步排查:先检查数据流,再检查渲染逻辑
- 验证修复:AI 给出的方案,先在本地验证再应用
第七章:实战
7.1 必做实战
实战 1:编写《常见错误速查手册》
整理你在学习过程中遇到的所有错误,按以下格式:
| 错误现象 | 原因 | 解决方案 |
实战 2:优化列表页性能
在你的用户列表页中实现:
- 搜索输入防抖(300ms)
- 路由懒加载
- 表格行使用唯一 ID 作为 key
7.2 FAQ
Q:DevTools 看 Network 请求返回 200,但页面显示错误?
检查响应拦截器是否正确处理了数据结构。可能后端返回了 200 但 code 不是 200。
Q:页面白屏怎么排查?
- Console 看报错
- Network 看接口是否返回数据
- 检查是否有空值导致的 .map() 报错
- 检查路由配置是否正确
下一期预告:综合项目实战与结业 —— 独立完成一个完整业务模块
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)