关于技术探索与实践的一些经验:一个被 Cursor 救赎的前端夜猫子

延迟优化师
2025-12-15 21:43
阅读 218

凌晨两点,窗外静安寺地铁早已收班,我合上 MacBook,泡了杯速溶咖啡——不是提神,是庆祝。今天终于把那个恶心的 Lottie 动画性能问题搞定了。这已经是我这周第 3 次通宵 debug,而救我命的不是 Red Bull,也不是 Stack Overflow,而是 Cursor

我是谁?坐标上海,在一家中型电商公司做前端,租的房子离公司步行 10 分钟,图的就是加班完还能“滚”回家。喜欢写动画、搞交互细节,也喜欢在深夜一个人敲代码——没人打扰,没 PM 在钉钉疯狂 at,世界清净得像 React 的虚拟 DOM。

这篇文章不是教程,也不是高大上的架构演进史。它更像是一封“血泪总结”,记录我在过去一年里,如何从“AI 工具尝鲜党”变成 Cursor 忠实用户的过程,以及这些工具如何实实在在地帮我搞定项目、优化简历、甚至拿下新 offer。


被逼出来的技术探索:从“能跑就行”到“必须丝滑”

去年双 11 前两周,产品经理甩给我一个需求:“首页加个动态粒子背景,要有呼吸感,但不能卡,尤其低端安卓机。”
我内心 OS:你当我是 WebGL 魔法师?

一开始我用 canvas 手搓,结果低端机帧率直接掉到 15 FPS,测试同事截图发群里:“这动效比我奶奶走路还慢。”
后来尝试 Three.js,体积太大,首屏加载多出 800KB,运维看了直摇头:“CDN 流量费你报销?”

这时候,我突然想起前几天刷到的一个开源库 —— lottie-web + Web Workers 优化方案。但文档写得像天书,示例代码跑不通,报错信息就一句:

Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'play')

当时真的想砸电脑。


AI 编程工具?我试过一箩筐

说实话,我对 AI 编程工具一直持怀疑态度。Copilot?经常生成过时的 API;CodeWhisperer?对中文注释支持拉胯;某国产 IDE 插件?干脆卡到连输入都延迟。

直到我遇到 Cursor
不是因为它功能多牛(虽然确实强),而是它理解上下文的能力简直离谱。比如我把整个 Lottie 组件文件丢给它,问:“为什么在 iOS 上播放正常,安卓 WebView 里就不动?”

它不仅定位到是 requestAnimationFrame 在低功耗模式下被节流的问题,还直接建议:

“可以改用 setTimeout 模拟帧循环,或者把动画逻辑扔到 Web Worker 里避免主线程阻塞。”

更绝的是,它直接帮我重写了关键部分:

// 使用 Web Worker 隔离动画计算
const worker = new Worker(new URL('./lottie.worker.ts', import.meta.url));

worker.postMessage({
  type: 'INIT_LOTTIE',
  animationData: require('@/assets/hero.json'),
});

worker.onmessage = (e) => {
  if (e.data.type === 'FRAME_UPDATE') {
    // 主线程只负责渲染,不计算
    renderFrame(e.data.canvasData);
  }
};

配合 OffscreenCanvas,最终在红米 Note 9 上跑出了 50+ FPS。上线后,PM 罕见地发了个“👍”。


技术分享 ≠ 自嗨:要能落地,更要能求职

很多人写技术博客,堆一堆术语、贴几张火焰图,看起来高大上,但实际项目根本用不上。我以前也这样,直到面试被问倒。

上个月面试一家外企,面试官看到我简历写“精通前端性能优化”,直接问:

“你说用 Web Worker 优化 Lottie,那通信开销怎么控制?Worker 内存泄漏怎么排查?”

我当时懵了。光会用 Cursor 生成代码不够,你得理解它为什么这么写

所以现在我的技术探索有个铁律:每个新方案,必须回答三个问题

  1. 业务价值是什么?(比如:提升转化率 2%)
  2. 技术成本多高?(Bundle size / 开发时间 / 维护难度)
  3. 失败了怎么办?(降级方案 / 监控埋点)

比如我们后来给 Lottie 加了性能兜底策略:

if (performance.now() - start > 100) {
  // 如果首帧渲染超 100ms,直接 fallback 到静态图
  showStaticFallback();
  reportPerfIssue('lottie_slow');
}

这种细节,才是面试官和 Leader 真正想听的。


Cursor 如何融入我的日常开发流?

我不是让 AI 替我写代码,而是把它当成“超级结对编程伙伴”。我的典型工作流:

  1. 深夜灵感来了 → 用自然语言描述想法给 Cursor
  2. 它生成初版代码 → 我 review 并调整逻辑
  3. 遇到奇怪 Bug → 复制报错 + 相关代码片段,问“可能原因?”
  4. 写技术文档/PR description → 让它帮我润色成专业语气

最爽的一次是上周五晚上,线上突然白屏。日志显示:

ChunkLoadError: Loading chunk 123 failed.

运维说 CDN 没问题,测试说本地能跑。我快疯了。
把 webpack config + 错误堆栈喂给 Cursor,它秒回:

“可能是动态 import 的 chunk 名称冲突。检查是否多个路由用了相同 lazy load 的组件名?”

果然!两个页面都 lazy load 了 @/components/CommonModal,但打包时 hash 相同,CDN 缓存污染了。加了个 magic comment 解决:

const Modal = () => import(/* webpackChunkName: "modal-home" */ '@/components/CommonModal');

凌晨 1 点搞定,回家路上发了个朋友圈:“感谢 Cursor,今晚不用睡公司沙发了。”


工具对比:为什么最后选了 Cursor?

工具 优点 缺点 我的使用场景
GitHub Copilot 集成好,补全快 上下文短,复杂逻辑容易跑偏 写简单 util 函数
CodeWhispererr 免费,AWS 生态友好 对非 Java/Python 支持弱 几乎不用
Cursor 长上下文、可编辑整个文件、支持本地模型 需科学上网(但值得) 核心开发、Debug、写文档

关键一点:Cursor 能理解整个项目结构。你让它“重构这个 hooks”,它不会只改一个文件,而是联动修改所有调用处。这才是生产力革命。


给想跳槽同学的真心话

如果你正在准备求职,别只刷 LeetCode。展示你解决问题的完整链路更重要。

比如我在新简历里写:

“通过 Web Worker + OffscreenCanvas 优化 Lottie 动画,低端机帧率从 18 FPS 提升至 52 FPS,首屏交互时间减少 320ms,间接提升活动页转化率 1.8%。”

附上 GitHub 链接(脱敏后的核心代码),再加一句:

“完整技术方案及性能对比数据,可提供详细文档。”

面试官眼睛都亮了。

而这些文档,80% 是 Cursor 帮我整理的。它甚至能根据我的 commit message 自动生成 changelog。


最后:工具是桨,你是船长

有人担心 AI 会让程序员失业。我觉得恰恰相反——会用 AI 的程序员,效率碾压不用的

但记住:AI 生成的代码可能有坑,可能有安全漏洞,可能不符合团队规范。你永远得是那个“拍板的人”。

就像我导师说的:“工具再聪明,也替代不了你对业务的理解,对用户体验的敏感,以及——凌晨三点面对线上事故时的冷静。”

所以,大胆探索,谨慎落地。
用 Cursor 写代码,用心写人生。

(完)

P.S. 如果你也住在上海,常加班到深夜,欢迎约咖啡聊聊动画优化——反正我也睡不着 😅

评论 0

最热最新
暂无评论
匿名用户Lv.1
0
影响力
0
文章
0
粉丝