面试题答案
一键面试控制一次性渲染的数据量
- 分页加载
- 策略:每次加载固定数量的数据,例如每次请求20条数据。当用户滚动到列表底部时,再加载下一页数据。
- 原理:减少一次性渲染的数据量,降低浏览器渲染压力。同时,由于每次请求数据量小,网络传输压力也会降低。
- 渐进式加载
- 策略:初始加载少量核心数据,比如前5条,随着用户滚动,逐渐加载更多数据,每次加载数量可动态调整。
- 原理:快速展示部分内容,让用户先有内容可看,后续随着用户浏览逐步加载,避免一次性大量数据加载造成的卡顿。
虚拟列表技术
- 原理 虚拟列表只渲染可见区域内的列表项,而非全部列表项。当用户滚动时,动态计算并渲染进入可见区域的新列表项,同时回收离开可见区域的列表项所占用的资源。
- 实现方式
- 使用现成库:如
react - virtualized
或react - window
等库。以react - virtualized
为例,它提供了List
、Table
等组件,通过设置height
、rowCount
、rowHeight
等属性,组件内部计算只渲染可见区域的行。 - 自定义实现:计算可见区域的起始和结束索引,根据索引从数据源中取出对应数据进行渲染。同时,监听滚动事件,实时更新可见区域索引。
- 使用现成库:如
其他优化策略
- 数据缓存
- 策略:将已经加载的数据缓存起来,当下次需要相同数据时,直接从缓存中获取,避免重复网络请求。
- 原理:减少网络请求次数,加快数据获取速度,提升整体性能。可以使用
localStorage
或内存缓存(如在组件内部维护一个缓存对象)。
- 优化渲染函数
- 策略:使用
React.memo
包裹列表项组件,对props
进行浅比较。如果props
没有变化,则不重新渲染该组件。对于父组件,可以通过useCallback
和useMemo
来控制函数和数据的变化,减少不必要的渲染。 - 原理:减少不必要的组件重渲染,提升渲染效率。
- 策略:使用