首页 / MapLibre / 使用示例
性能优化
同一份 8000 点数据,热力图与圆点两种画法切换,右上角实时显示帧率。
「重建数据」按钮给出一次 setData 的实际耗时。
源码与运行效果
说明
热力图把点密度烘成一张纹理,绘制成本与点的数量基本无关; 圆点图层则要为每个要素生成几何与顶点。数据越多,两者差距越大。
帧率由 requestAnimationFrame 每秒计数得到,
包含页面里所有绘制,适合对比同一页面内的两种模式,
不适合跨设备横比绝对数值。
| 手段 | 做法 | 适用 |
|---|---|---|
| 换图层类型 | heatmap 替代 circle | 只看密度,不需要单点交互 |
| 减少数据量 | 聚合、抽稀、按级别过滤 | 点位远超屏幕可分辨数量 |
| 降低更新频率 | 合并 setData | 高频流式数据 |
| 关闭无用图层 | visibility: 'none' | 隐藏图层仍在参与绘制时 |
| 避免每帧改布局 | 只改绘制属性 | 动画与交互反馈 |
setData 的耗时包含序列化与上传,8000 个点通常在几毫秒量级;
真正拖慢体验的是每帧都调用,而不是单次调用本身。
排查卡顿先看是不是「每帧都 setData」或「每帧改 text-size」。 把更新压到每秒几次,帧率往往立刻恢复,比换渲染方案更快见效。