一个日活7000万的客户体验平台,代码库停留在React 15和Webpack 1。这不是考古现场,是Medallia工程师Matheus Albuquerque每天面对的真实战场。
沉默的大多数开发者困境
「浏览Hacker News时,你会感觉所有开发者都在FAANG工作,做着最热门的技术。」Matheus在QCon London演讲开场引用了一篇叫《Silent Engineers》的文章。
但真相是:99%的开发者用着Fortran、COBOL、Perl或PHP,安静地写代码。他们不在聚光灯下,却要解决最棘手的遗留系统问题。
Matheus明确划清界限:这次不谈React最新版、Svelte或时髦的渲染模式。他要讲的是工作中优化性能的真实挑战——就像那个画马的梗图,四步简笔画之后,突然变成一匹写实骏马。中间省略的,全是血泪。
正方:激进派的技术债清零方案
面对React 15+Webpack 1的古董架构,最直观的想法是:推倒重来。
重写派的理由很充分。现代构建工具、新框架、新语法——全部升级,一劳永逸。团队可以甩掉历史包袱,用上Suspense、Server Components这些利器。
但Matheus用实际经历泼了冷水。Medallia的平台支撑着海量企业客户的调查问卷系统,任何中断都直接影响客户收入。全量迁移?风险不可承受。
反方:保守派的渐进式生存策略
Medallia选择了另一条路:在约束条件下最大化性能收益。
第一招是AST-based codemods(基于抽象语法树的代码转换工具)。不是手动改几十万行代码,而是写脚本自动处理模式化迁移。Matheus团队用这招完成了大规模代码库的渐进式升级,而非大爆炸式重写。
第二招是differential serving(差异化资源分发),即module/nomodule模式。现代浏览器拿到ES模块,老旧浏览器拿到转译后的代码。同一份代码库,两条构建管线,用户各取所需。
第三招最狠:Preact替换React。API兼容,体积砍到1/10。对于需要支持IE11的企业级平台,这几乎是唯一能在不 breaking change 前提下缩减包体积的手段。
我的判断:约束即创新土壤
Matheus的分享揭示了一个被忽视的事实:性能优化的最高境界,不是在绿场地上建摩天楼,而是在运行的火车上换引擎。
Medallia的选择不是技术审美上的妥协,而是商业逻辑下的最优解。7000万日活、企业级SLA、遗留浏览器支持——这些约束倒逼出的方案,比任何技术博客上的「最佳实践」都更具参考价值。
真正稀缺的能力,是区分「想要重构」和「需要重构」的判断力。以及,在不能重构时,依然能榨出性能提升的创造力。
你的代码库里,是否也藏着一座「本该重写却从未重写」的冰山?面对它,你会选择哪一派?
热门跟贴