13. 独立开发、团队、学习与工作流 · 讲者经验 · 教学步骤 3
只学项目马上需要的知识
项目断点决定学习顺序,知识可立即进入实践反馈。
原知识点:优先学习当前项目马上需要的知识;SEO竞品学习优先看行业老玩家,而非只追新兴创业明星。
执行步骤
- 从当前最早断点写出一个必须回答的技术或业务问题。
- 优先查官方文档和长期有效基础资料,记录URL、产品/标准版本、文档更新时间与访问日期。
- 把学习拆成一个能在当前项目外独立运行的小练习;范围由回答问题所需证据决定,不设固定分钟数。
- 运行练习并保存输入、预期、实际结果、错误、自己的解释和适用边界。
- 将验证通过的知识更新到SOP并用于当前项目;无关知识移入以后清单。
可复制工作表
# 按需学习记录 学习ID/当前项目/版本:__ 最早断点及证据位置:__ 必须回答的问题:__ 为什么现在必须学/明确不学什么:__ 官方来源标题与URL:__ 产品/标准/文档版本:__ 文档更新日/访问日:__/__ 来源归档路径/hash:__ 适用范围、前置条件与限制:__ # 可独立运行练习 练习目录/文件:__ 运行环境与版本:__ 输入/夹具:__ 运行命令或操作:__ |用例|预期|实际|错误/日志位置|结果| |---|---|---|---|---| |正常机制|__|__|__|__| |边界/反例|__|__|__|__| |反证测试|__|__|__|__| 我的解释与证据:__ 会推翻解释的结果:__ # 项目复测与SOP 项目文件/commit/PR:__ 改动前基线:__ 同口径复测命令与结果:__ 回滚点:__ SOP原条目:__ SOP更新后条目:__ 本轮不相关、以后再学:__ 批准人/日期:__
完整示例
示例(日期与ID用于演示,官方页面元数据按访问日记录):
学习ID=LRN-017;当前项目=invoice-ui release-v3/commit 71ba92c。最早断点是运行时新增的5个“删除”按钮点击后父列表处理器0/5收到事件,证据=evidence/learning/LRN-017/baseline-playwright.json。必须回答:在未调用stopPropagation()时,动态子元素的click是否会冒泡到稳定父容器,以及target和currentTarget分别指向什么。现在必须学,因为它阻塞删除任务;本轮不学习自定义事件、Shadow DOM跨边界和框架合成事件。
官方来源:MDN《Event bubbling》,URL=https://developer.mozilla.org/en-US/docs/Learn_web_development/Core/Scripting/Event_bubbling;产品/标准范围=浏览器DOM Event与事件委托,页面最后修改2025-10-19,访问2026-08-01;归档=evidence/learning/LRN-017/mdn-event-bubbling-20260801.pdf,SHA-256=7f31c9b6623f7f2a5e0cd8c7753157f96468bdc4d69068fe143dca02e298172e。适用于普通Light DOM click/keyboard触发的click;不外推到Shadow DOM、跨文档或主动停止传播的场景。
独立练习=examples/delegation/index.html与tests/delegation.spec.mjs;环境=Node 24.3.0 + Playwright Chromium 139;夹具=页面加载后插入button[data-action=delete];命令=npm run test:delegation -- --reporter=json。
列较多时可左右滚动;首列会固定,便于逐行比较。
| 用例 | 预期 | 实际 | 错误/日志位置 | 结果 |
|---|---|---|---|---|
正常机制:父ul监听,点击动态按钮 | 父处理器1次;target=BUTTON、currentTarget=UL | 三次点击均得到1次/目标值一致 | evidence/learning/LRN-017/run-normal.json | 3/3 PASS |
边界:点击按钮内svg | 父处理器触发;用closest('[data-action]')解析按钮 | target=svg,closest得到按钮,删除ID正确 | evidence/learning/LRN-017/run-boundary.json | 2/2 PASS |
反证测试:中间层调用stopPropagation() | 若解释正确,父ul不应收到事件 | 父处理器0次;删除未执行 | evidence/learning/LRN-017/run-falsifier.json | PASS,支持而非推翻解释 |
解释:动态节点无需逐个绑定;事件沿Light DOM传播,稳定父容器可以委托,但必须解析target.closest()并处理传播被停止的边界。会推翻解释的结果是:在没有Shadow DOM、没有停止传播且事件可冒泡的同一环境里,父监听仍稳定收不到click;本次未观察到。
项目改动=src/ui/invoice-list.ts,commit=9ac41de,PR=PR-214;把逐按钮监听改为列表委托并补closest()与键盘激活测试。改动前动态按钮0/5成功;命令=npm run test:invoice-list复测动态点击5/5、键盘4/4、静态按钮5/5通过,日志=evidence/learning/LRN-017/project-retest.json。回滚点=release-v3/71ba92c。SOP由“新增按钮后逐个绑定监听”更新为“稳定父容器绑定一次,校验closest()结果,并覆盖动态节点、嵌套图标和键盘用例”。以后再学=Shadow DOM事件重定向。工程负责人赵于2026-08-02批准更新SOP。
完成清单
- 学习项直接对应当前最早断点,并明确本轮不学的内容,范围不由固定学习时长决定。
- 官方来源、产品/标准版本、更新/访问日期、归档证据与适用边界齐全。
- 练习可独立运行,正常、边界和反证用例均有预期、实际与日志;反证条件明确。
- 只有项目按同口径复测通过并留有commit与回滚点后才更新SOP。
适用条件
兴趣性学习可另行安排。
来源:聊一聊海量页面SEO与我的近期收获