有经验的专家写的代码,和无经验的新手写的代码,在运行时性能上大概会有多少差异?
个人感觉,常规业务逻辑代码通常可以差 1 倍;如果算上框架的影响,可以差 2~4 倍。
仅考虑业务代码的话,新手容易搞不清楚 Control Flow 进而绕了一大圈去完成原本可以直接完成的事情。我在优化或者重构过程中需要花费很大的精力去梳理原先的 Control Flow,这部分优化已经可以带来将近成倍的提升,例如:
- 将串行网络请求修改为并行
- 添加一些缓存(如
React.memo
) - 把会导致 UI 重渲染的代码整合在一起,做批处理
细化到核心算法层面,我的思路是:算法剪枝 + 围绕引擎的优化(主要是 V8)。剪枝就得根据具体算法来看了,剪得好也能得到将近成倍的提升,也不属于本问讨论范围。
以各位专家(我不是)的经验,这种编译器最多可以提升多少% 运行时性能?可以推荐一下该款编译器的主要优化方向吗?
围绕引擎的优化我认为是有可以做的空间的。例如:
Map<string, T>
重构为Record<string, T | undefined>
,读取速度可以快 30% 左右,修改删除速度不清楚forEach(fn)
重构为for (let i = 0; i < arr.length; i++)
循环自身开销可以减少 20% 左右funct