Skip to content

VectorTileLayer瓦片GC回收使用ArrayBuffer复用池,提升地图在频繁缩放和拖拽时候的流畅度#2843

Open
HGX-DJK wants to merge 5 commits intomaptalks:masterfrom
HGX-DJK:maptalks-gc
Open

VectorTileLayer瓦片GC回收使用ArrayBuffer复用池,提升地图在频繁缩放和拖拽时候的流畅度#2843
HGX-DJK wants to merge 5 commits intomaptalks:masterfrom
HGX-DJK:maptalks-gc

Conversation

@HGX-DJK
Copy link
Contributor

@HGX-DJK HGX-DJK commented Mar 13, 2026

  1. 消除“垃圾回收 (GC)”引起的卡顿
    优化前:每加载一个瓦片,Worker 线程都会申请一大块新的内存(ArrayBuffer)来存储几何数据。渲染完成后,这块内存被释放。在大量瓦片更替时,浏览器会频繁触发垃圾回收(Garbage Collection),导致主线程出现微小的“掉帧”或卡顿。
    优化后:建立一个内存池。瓦片不再使用时,内存不被销毁,而是通过 returnBuffers 机制送回 Worker。下次加载新瓦片时,直接从池中取用旧内存。这极大地减少了 GC 的频率,让动画更加顺滑。
  2. 实现内存的“闭环回收”
    Worker → 主线程:几何数据打包好后传给主线程渲染
    主线程 → Worker:当瓦片被销毁(deleteTile)时,我们主动收集这些 ArrayBuffer,并发送指令将内存返还给 Worker 的内存池,而非丢弃

@fuzhenn
Copy link
Member

fuzhenn commented Mar 14, 2026

👍 复用arraybuffer确实是好思路。
但需要您确认两个问题:

  • 需要确认一下是否有内存泄漏,找个较大的geojson图层,载入数据后从map remove,并再次addLayer,检查内存是否只增长不
  • 另外ci有个用例失败了 should can update line visible,可以在本地的vt项目下确认失败的原因。(另一个失败的用例 terrain of fog 不用管他)

测试命令:
npm run tdd -- -g "should can update line visible"

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants