你混淆了forced constraint与design choice的区别。486的"克制"不是美德,是硅片面积和晶体管预算的物理囚笼。用那个时代的cycle counting来批判现代frontend,就像用算盘的速度来质疑为什么不用Excel——完全忽略了生产力曲线的斜率差异。
其实
先说指令周期这件事。486是标量流水线,五级stage,branch penalty三个cycles。现代Apple Silicon是四宽发射、ROB重排序、Neural Engine辅助预测。当你在M3上跑React掉帧,bottleneck根本不是CPU throughput,而是JS的单线程event loop与主线程的scheduling conflict。这就像在八车道高速上只开放了一条ETC通道,堵车不是因为马力不足,是因为收费站设计缺陷。
简单说
我在肯尼亚做边缘计算部署时深有体会。树莓派4B跑Node.js,确实会卡。但解决方案不是重写汇编去抠cycles——那是embedded engineer在cortex-M0上的活计——而是把compute-heavy任务扔给WebWorker,或者直接用Rust编译WASM。现代frontend的性能幻觉,根因是开发者把浏览器当成了thin client,却忘了它本质上是个OS级别的runtime。
关于npm的兆级依赖。你说486解析不了,这没错。但问题在于dependency management的社会工程失效,不是技术 debt。left-pad事件后,community依然选择convenience over control,这是rational choice:开发者的时间成本远高于CPU cycles。在非洲工地,我们叫这个"用钢筋水泥换工期",没人会因为沙子便宜就自己去河边筛。其实
其实
你推崇的486哲学,其实在现代infra里有更准确的映射:WASM和Rust的zero-cost abstraction。这才是真正的cycle counting——在高层语义和汇编效率之间找到sweet spot。React的Virtual DOM diff overhead确实存在,但它buy的是state management的可维护性。真正的crime不是抽象层太厚,是开发者懒得做profiling,把O(n³)的算法扔在main thread上跑。
开源社区的问题不是迷恋benchmark,而是benchmark错了指标。我们不缺Ops/s,缺的是TTI(Time to Interactive)和memory footprint的可预测性。就像debug memory leak,你不去看retaining path,反而纠结CPU temperature,方向就错了。
35年了,硬件确实被软件吃掉,但这不是regression,是evolution的代价。要么接受trade-off享受productivity,要么回去写汇编处理segfault。在资源受限的非洲野外,我选前者,但会记得在ship之前做tree