多分支修复撞车的问题
# 多分支撞车问题:
同时修复问题 1 2 3 ,并新建分支 1 2 3, 各自测试没有问题,于是发到预发布环境上验证,
问题1 2 都验证ok,问题3 验证的时候 不太正常,
具体表现为: 有个tab标签组,可关闭某个标签, 关闭标签需和嵌套的iframe进行通信,通信的一个作用是关闭一个轮询定时器
问题:当关闭标签时, iframe应有的事件没有发生, 造成了交互异常,到底是因为什么原因呢
# 分析
尝试方案:打日志, 在标签层和iframe层都埋了日志代码, 查看日志输出, 在本地进行调试的时候,日志及业务流程正常,但是部署到koa上的时候又不正常, 感觉上是部署不生效, 于是对比输出文件hash,发现又是正常的,那是因为什么原因呢? 只好追加更多更详细的日志, 查看到底是在哪一步出现了问题, 有一个很明显的地方是,tab标签点击事件触发了, 但是iframe表单没有正常响应, iframe为什么没有收到postMessage消息呢
于是查看iframe结构, 观察它的表现, 当我关闭标签的时候,会把iframe给删除了, 我好像发现了原因, 对了iframe都删除了, 不在dom结构中了, 它的一切行为就得不到执行了
那为什么我本地又是正常的呢, 于是查看本地iframe的表现, 调试发现本地的iframe又妥妥的在dom结构中, 并没有删除, 这是为什么呢? 突然之间想起来了, 在修复问题2的时候,我做了一个优化,当关闭标签的时候,会更新lru,把不存在标签对应的iframe给删除, 两个分支都基于同一个base, 分支2已经优化了lru并更新到预发布环境, 分支3 仍然保留了lru的问题, 那么本地正常就能理解了, 它对应的仍然是老代码
找到了问题原因, 解决起来就比较简单了
# 解决
在标签点击事件中, 先向iframe进行postMessage, 再延时执行删除标签 setTimeout , 让他们不在同一个任务队列里执行, 优先postMessage, 再延时删除标签,经过验证, 问题解决了
# 总结
同项目多分支开发,需要考虑到代码的相互干扰性, 都是自己开发的时候还容易发现点,别人写的就更难发现了,