共十四题,按基础、进阶、思考三档排列,覆盖第 06 到 11 章并回扣第 02、03 章。每题给出考察目标与提示,不给答案;基础题与进阶题建议在本书各节的示例代码上续写,思考题写成短文与他人讨论更有价值。
第 1 题(公式解析)
给第 6.1 节的 formula_parser.js 补一个测试用例集,至少覆盖 =2^3^2、=-(1+2)*3、=SUM(A1:A3,5) 三种形态;再写一个函数把任意 AST 打印成缩进树,肉眼可读。
第 2 题(循环引用定位)
第 6.1 节的引擎把整条污染链都标成错误值。改造它:在污染子图中区分「真正的环成员」与「环外但被波及的格子」,前者标循环错误,后者标依赖了循环引用。
第 3 题(不等高滚动)
给第 6.2 节的 RowLocator 增加 scrollToIndex(index, align) 方法:把指定行滚到视口顶部、底部或居中三种对齐,返回应设置的 scrollTop。
第 4 题(混合模式实验)
用第 7.2 节的 compositor 制作一张对照图:同一组三层文档分别以 source-over、multiply、screen、overlay 合成,导出四张 PNG 肉眼比对,再各取同一坐标像素读值验证公式。
第 5 题(剪贴板降级链)
在第 7.1 节的画图骨架上实现「复制选区图像到剪贴板」:优先 ClipboardItem 写 PNG,失败退 execCommand 方案,两端都失败给出明确提示。至少在两个浏览器实测。
第 6 题(选区统计分帧)
第 6.3 节的选区统计(求和、平均、计数)在大选区下会卡。把它接入第 10.1 节的任务队列:分片计算、进度回传、选区变化时取消旧任务;状态栏显示「已统计 N 格,当前合计 X」。
第 7 题(tile 滤镜 × 任务队列)
把第 7.3 节的 tile_pipeline 从直连 Worker 改造为经 task_queue 提交:tile 按与视口的距离定优先级,用户滚动时 cancel 视口外的待执行 tile。用第 10.3 节的 PerfMonitor 记录改造前后的帧时间。
第 8 题(图层文档存档)
给第 7.2 节的 LayerDocument 实现存档与恢复:保存到第 8.2 节的 VFS(Blob 直存),采用第 11.2 节的信封格式加版本号与图层元数据;再写一个 v1 到 v2 的迁移函数(例如把 blend 从数字枚举改为字符串)并测试旧档打开。
第 9 题(桌面环境集成)
把第 09 章的 mini-WebIDE 注册为第 08 章桌面环境的一个应用:启动时从 VFS 的 /Projects 打开上次会话文件,挂起时序列化打开的文件路径与光标位置,完整实现 serialize 与 deserialize。
第 10 题(存储分层改造)
把第 8.2 节 VFS 的持久层从 IndexedDB 换成 OPFS(在 Worker 里用同步访问句柄),对外接口保持不变。用几十 MB 级图像文件对比两种后端的保存耗时与内存水位,写出一段选型结论。
第 11 题(虚拟化边界)
什么规模以下的列表不值得虚拟化?从行数、单元格复杂度、目标机型三个维度给出你的判断线,并论证:虚拟化引入的复杂度(不等高、锚定、无障碍)在什么条件下超过它省下的成本。
第 12 题(WASM 立项答辩)
假设你的表格应用全表重算在十万行场景下 P95 耗时两秒。写一页纸立项答辩:先用第 10.2 节四闸门检查,再给「脏区闭包优化」「分帧加进度」「WASM 求值器」三个方案排序,附量化依据。
第 13 题(复刻的边界审计)
选一个你常用的桌面软件,列出它的二十项交互特性,逐项标注「思想层(可复刻)」或「表达层(不可碰)」;对灰色项(标志性动效、布局比例这类介于两者之间者)写出你的处理原则。
第 14 题(路线复盘)
本书六章做了六类应用。回答:哪一类最适合纯前端复刻路线长期演进?哪一类最先撞到纯前端的天花板(从执行环境、文件系统、性能三方面想)?若只允许把其中一类做成产品,你选哪个,商业分层画在哪条线上?