Severe performance penalty found in VSCode rendering loop
4 months ago
- #rendering-loop
- #binary-heap
- #performance-optimization
- 渲染循环的主要瓶颈位于/vscode/src/vs/base/browser/dom.ts:365处,该处的动画帧队列在while循环内每次迭代都会进行排序。
- 当前实现由于重复排序具有O(n² log n)的时间复杂度,当存在50+视图部件时,每帧会浪费1-2毫秒,影响性能。
- 提出的解决方案是用二叉最小堆替代基于数组的队列,将时间复杂度降至O(n log n),并将队列开销减少85-90%(从~1.5ms降至~0.2ms)。
- 具体实现包括:创建一个具有push和shift操作的BinaryHeap类来维护堆属性,并更新dom.ts文件以使用这个新结构。
- 二叉堆会自动维护优先级顺序,无需手动排序,从而显著提升性能。