作品
我做过的东西,和它们带来的改变
这些复盘和长文都来自生产环境里的前端工作:浏览器级标签页系统、真实约束下的性能和可靠性,还有用在实际工作里的 AI Agent。每张卡片都链到一篇完整的笔记。
- 项目
- 8
- 主题
- 3
- 语言
- EN / 中文
项目复盘与构建
全部文章-
从工程视角理解电商增长数据的本质
问题: 最近转进 TikTok Shop 一个做电商增长的新组,由于自己之前没有接触过增长工程师这个专业,所以借着团队内现有项目和 GPT 学了一轮,我了解到了数据在增长工程里几乎是最重要的东西,以下是我的学习增长数据心得,本文纯…
- 团队
- TikTok Shop 电商增长
- 把 GMV 拆成工程口径的转化漏斗(UV × PDP 到达率 × 加购/立即购买 × 进入结算 × 支付成功 × 人均订单数 × AOV),让指标下滑能定位到具体环节而不是停在顶层数字。
- 把 App Landing 实验的 Primary Metric 定为 7 天内 Web-assisted App paid GMV / eligible MWeb UV,同时约束“能归因到 Web 触点”“真的在 App 内成交”“按单位流量衡量价值”三件事。
- 要求一个稳定的 web_attribution_id 从 MWeb 一路传到 App 订单,否则即使 App 订单上涨也无法证明增长来自 Web 改动。
- A/B 实验
- deeplink
- btm_chain
- 漏斗分析
- Cohort 留存分析
- 多触点归因
阅读笔记 2026.07.02
-
运营管理心跳系统设计
问题: 从用户动作、长链接入、Redis 时间窗口、HCM 状态提交、下游传播、跨 region 切流和 TT/主业务线拆分,一步步推导运营管理心跳系统的设计。
- 角色
- HCM 与心跳服务全栈负责人
- 时间
- 2024 Q3 – 2025 Q2
- 我维护的 HCM/Heartbeat 链路服务 47,149 个 agent、7,000 个 skill group、约 4,000 QPS 和 141 个上游调用方。
- TT 与主业务线拆分后,旧 HCM 侧减少约 3,000 个 agent 和约 2,000 QPS,TT 的心跳、状态提交和路由在 TT 内闭环。
- 美区一次事故里,binlog 到 HCM MQ 链路堆积约 300k 条消息,依赖 ES 的 handler 阻塞了共享消费;事后补了 handler 维度耗时指标,并把 binlog 直接发 RMQ 的工作状态链路列入改造。
- Redis
- MQ
- DBus
- binlog
- Elasticsearch
- WebSocket
阅读笔记 2026.06.19
-
Workspace v2 Tab System 性能优化:让热切换、冷启动和后台任务各走各的路
问题: 一次 Workspace tab 性能复盘:把首屏、热切换、后台压力拆开测,用 profiling、E2E gate 和回滚记录挡住假收益。
- 角色
- 负责人
- 时间
- 2026 Q2
- 团队
- TikTok Shop 电商前端
- 冷切换 p95 duration 从
1829.8ms降到812.3ms(-55.6%),p95 post-visible blocking 从1193.7ms降到8.7ms(-99.3%),主要准备工作被移到点击前。 - Scheduling route FMP 从
14773ms到11926ms,降低2847ms / 19.3%:route chunks 从6785ms-15464ms才被发现改成 route-aware preload。 - Official Forecast route FMP 从
14271ms到11612ms,降低2659ms / 18.6%:route-critical CSS 从约 13.8s 提前到约 1.9s。
- CDP Chrome
- React
- iframe sandbox
- requestIdleCallback
- WebSocket
- 前端
阅读笔记 2026.05.18
-
Workspace v2 Tab System:把浏览器标签页带进工作空间
问题: Workspace v2 要做的不是多画一排 tab。用户会同时打开多个业务对象,刷新和分享链接还要回到正确页面;后台 runtime 不能偷偷改 URL、弹层、事件或前台 CPU。最后真正要解决的是 ownership:intent、URL、tab 状态、runtime c…
- 角色
- 负责人
- 时间
- 2026 Q2
- 团队
- TikTok Shop 电商前端
- 刷新不丢 tab,多窗口不一致的问题也解决了:BFF 存打开的 tab,React Query 让当前窗口立刻响应,BroadcastChannel 通知其他窗口 invalidate 后重新拉取。
- 地址栏保留真实业务 URL,例如 /workspace/workstream/:id/...,刷新、收藏、分享链接都能回到业务页,而不是只在自己本地有意义的 /tabs/:id。
- 只有当前 tab 能写 URL、弹层、接收前台事件和占用前台 CPU;hidden runtime 的 history 写入会被拦住并记录成 scope-drop。
- React
- TypeScript
- React Query
- BroadcastChannel
- History API
- iframe
阅读笔记 2026.05.18
-
用 harness 让 AI 做性能优化:goal-driven loop 和 ledger
问题: 我做了一个性能优化 skill,把 AI Agent 从“可以试试懒加载”这类建议,拉进 harness、目标和 ledger 组成的循环里一轮轮跑。在一次 Workspace 优化里,strict profile 看到 Workstream 5089ms -> 2519ms、Report Center 10…
- Workstream FMP 从
5089ms到2519ms(-50.5%):删除启动阶段无关 payload,预热 list API,把 notification/DnD/editor/actions 移到 final FMP 之后。 - Report Center FMP 从
10021ms到6762ms(-32.5%):把 notification 移到 FMP 后,并修复 prefetch body/cache-key 对齐。 - Scheduling FMP 从
10367ms到7630ms(-26.4%),Audit Workbench 从12610ms到10188ms(-19.2%)。
- TypeScript
- Service Worker
- GraphQL
- REST
- requestIdleCallback
- AI
阅读笔记 2026.05.16
- Workstream FMP 从
-
Agent Skills 探索实录 — AI Agent 时代的函数式蓝图
问题: Skill 就是跑在大模型上的函数——封装固定流程、定义输入输出、支持跨 Agent 复用。本文从第一性原理出发,拆解 Skill 的本质、设计原则和工程实践,帮你把零散的 Prompt 经验沉淀为可复用的能力单元。
- AI
- 软件工程
- Claude Code
- Agent
- Skills
阅读笔记 2026.03.23
-
用 NodeJS 构建一个玩具浏览器
问题: 没错,我又给自己挖了一个坑。我看到了一本名为《Web Browser Engineering》的有趣书籍,它教如何用 Python 构建一个浏览器。由于我现在正在学习 SICPJS,并将在课程结束时构建一个编译器,我认为这两门课程可能有些关联。我…
- 浏览器
阅读笔记 2022.04.27
-
从零构建 Redux(Redux 源码解读)
问题: 状态不过是一个 getter/setter。
- 软件工程
- 前端
- React
阅读笔记 2023.11.28
这里只列我写过笔记的项目,每一项都有对应的文章。