经纬志
首页 / MapLibre / 使用示例

性能优化

同一份 8000 点数据,热力图与圆点两种画法切换,右上角实时显示帧率。 「重建数据」按钮给出一次 setData 的实际耗时。

MapLibre GL JS 4.x · 更新 2026-10-28
源码与运行效果
运行效果

说明

热力图把点密度烘成一张纹理,绘制成本与点的数量基本无关; 圆点图层则要为每个要素生成几何与顶点。数据越多,两者差距越大。

帧率由 requestAnimationFrame 每秒计数得到, 包含页面里所有绘制,适合对比同一页面内的两种模式, 不适合跨设备横比绝对数值。

手段做法适用
换图层类型heatmap 替代 circle只看密度,不需要单点交互
减少数据量聚合、抽稀、按级别过滤点位远超屏幕可分辨数量
降低更新频率合并 setData高频流式数据
关闭无用图层visibility: 'none'隐藏图层仍在参与绘制时
避免每帧改布局只改绘制属性动画与交互反馈

setData 的耗时包含序列化与上传,8000 个点通常在几毫秒量级; 真正拖慢体验的是每帧都调用,而不是单次调用本身。

排查卡顿先看是不是「每帧都 setData」或「每帧改 text-size」。 把更新压到每秒几次,帧率往往立刻恢复,比换渲染方案更快见效。