codehz
2024-07-23 10:21:34 +08:00
(其实浏览器也不会绘制超过屏幕的内容( edge 有几个版本你就会在滚动过快的时候看到白屏被一个个方块填上的过程),但超过屏幕的内容不止是绘制的问题,还有布局等其他因素需要计算,加上为了 js 访问方便而设计的对象接口的 overhead 才会显得不能装太多东西,实际上就单纯说显示一个巨大的表格来说浏览器问题不是很大,好多设计起来就只有单页的文档(例如隔壁的 rust 的某文档,html5 的单页 spec ),其内容长度远超一般“无限滚动”正常用户能滚动到的范围,也可以顺利的在浏览器上呈现。。。(当然和一般无限滚动场景不同的是,它内容上是较为简单的,计算布局的压力也会小很多)
桌面端除了用虚拟滚动的思路之外,还有一种叫 imgui 的思路,其抛弃了控件的抽象,根据滚动位置直接计算出需要展示的范围,然后每次都只画用到的部分,也可以解决这个问题==(有一些商业表格控件就是这个思路)
之所以虚拟滚动一类的机制需要使用“复用”,其本质不是绘制元素有多慢,而是为了表达这个 UI 对象抽象带来的额外成本很高,不能简单的丢弃再重建,或者干脆建立一大堆放着