性能主题
本文回答:性能主题总览 —— vjmap 底座渲染、vjmapext 实体渲染桶、FX GPU 特效、事件节流、内存泄漏。
| 层 |
对象 |
性能关键点 |
| vjmap 底座 |
map / source / layer |
feature-state 换样式 / 减少 layer 数 / source 聚合 |
| vjmapext 实体 |
mapcadLayer.addEntity |
render-bucket 分桶 / styleChanged 快路径 / dynamic / beginBulk |
| GPU FX |
mapcadLayer.fx |
setQuality / addPoints 批量 / bucket 层级 / 事件 metrics |
| 事件 |
map.on / eventBus.on |
mousemove 合并 / RAF / debounce |
子项索引
最小代码:快路径 vs 慢路径
// 慢:几何 + 样式全量重算
for (const e of entities) {
e.color = 0xff0000;
e.changed();
}
// 快:仅样式
for (const e of entities) {
e.color = 0xff0000;
e.styleChanged(); // 不重建空间索引 / 不重新三角化
}
// 批量样式修改无需专用批量 API——styleChanged 只标脏,重绘按帧合并;
// 需要一步撤销时包 undo 事务:
mapcadLayer.undoManager.beginTransaction();
for (const e of entities) {
e.color = 0xff0000;
e.styleChanged();
}
mapcadLayer.undoManager.endTransaction();
性能诊断速查
主题级 Top 5 陷阱
changed() vs styleChanged() 混用:只改颜色却用 changed() → 整个空间索引重建。
- 循环 add 1 万实体不走 bulk:每次都触发 render → 上万次 RAF 合并失败。
- Marker DOM 数量上限:> 500 个 DOM Marker 就开始明显卡;换 Symbol 图层。
dynamic = false 的实体反复改属性:画面不更新或"怎么刷都一样"。
- eventBus 没 off:组件卸载后回调仍跑、还持有大对象引用 → 内存泄漏。
相关