浏览器地图的地形性能通常在用户拖动、缩放和取消加载时才真正暴露。MapLibre GL JS 的 v6.0.0-18 预发布说明聚焦三处 terrain 路径优化,并修复一个与 GeoJSON 瓦片加载取消有关的 worker 内存泄漏。它提醒 WebGIS 团队:性能改进要同取消语义、资源释放和真实交互帧一起验收,不能只凭静态截图判断升级成功。

可核查事实

  • v6.0.0-18 被 GitHub 标记为 pre-release,发布页显示由 github-actions 于6月29日发布。

  • 发布说明称 Mercator render-to-texture 阶段避免不必要 terrain 数据查找,以改善 terrain 渲染性能。

  • 发布说明称构建 DEM 数据和采样地形高程时减少分配压力。

  • 发布说明称准备 terrain 时复用 DEM 纹理。

  • 发布说明修复了取消 worker 请求时的内存泄漏:例如平移时取消 GeoJSON 瓦片加载,旧行为会让 promise 永久 pending。

  • 修复后 Actor.sendAsync 在中止时会以 AbortError reject,而不是保留等待帧及其捕获对象。

  • 发布页标明该 release 的提交为9ea262f,并带有 GitHub verified 签名。

核心机制:性能优化不能改变取消和释放的语义

本次预发布在 terrain 路径中减少不必要查找、降低 DEM 构建和高程采样的分配压力,并复用 DEM 纹理。它们都指向同一类成本:同一帧或同一次视图更新中重复获取、构造或分配的地形资源。升级验收应把相同相机轨迹、相同 DEM 覆盖和相同设备作为基准,比较帧时间、主线程和 worker 活动、纹理与堆内存,而不是只观察第一次加载。

更关键的修复在取消流程。发布说明举例:用户平移地图时,GeoJSON 瓦片加载可能被中止;若 worker 请求留下永远 pending 的 promise,等待它的异步帧和全部捕获对象就不能释放。Actor.sendAsync 改为在中止时 reject AbortError,意味着调用方应将取消视作预期控制流,并显式区分 AbortError 与网络、解析或样式错误。

GIS 场景:连续平移下检验地形和专题图层

一个山地专题图通常同时加载 DEM、栅格阴影、矢量边界和 GeoJSON 瓦片。测试应从静止视图扩展到连续平移、快速缩放、反复切换地形和离开页面:记录请求数、被取消请求、AbortError、worker 堆、纹理数量、帧时间和最终图层完整性。只在静止场景看 FPS,无法暴露取消请求遗留对象的问题。

由于此版本是 pre-release,生产升级需先在固定版本依赖和回归样例中执行。GitHub 发布页给出9ea262f 的 verified 提交,可作为供应链记录的一部分;但签名不等于应用的地形、样式和自定义层都已经兼容。应保留升级前后截图、性能采样、浏览器版本和错误日志,以便发现差异时回退。

技术路径

  1. 固定 MapLibre 版本、提交、浏览器、GPU、DEM源、样式和相机轨迹作为基线。

  2. 分别测量静止、平移、缩放、地形开关和页面离开时的帧时间、网络请求、worker堆和纹理占用。

  3. 将取消请求作为正常用例,统计 AbortError,不把它计入业务失败或未处理异常。

  4. 对 GeoJSON 瓦片、DEM和高程采样同时压测,确认连续操作后内存能回落。

  5. 保存地图截图之外的性能 trace、控制台错误和样式输出,发现回归时可定位到版本与场景。

  6. 预发布先在隔离环境灰度,再经过真实设备和生产数据权限审查后升级。

检查清单

  • 测试是否包含平移中取消 GeoJSON 瓦片的场景?

  • AbortError 是否被正确视为取消而非未捕获故障?

  • 连续缩放和平移后 worker 堆、纹理和帧时间是否回落?

  • DEM构建、高程采样和地形开关是否与专题图层一起测试?

  • 是否保存了版本、提交、浏览器、相机轨迹和性能证据?

风险边界

v6.0.0-18 是 pre-release,发布说明只列出 terrain 性能调整和一个取消请求的内存修复。它不构成对全部地图样式、自定义层、浏览器 GPU 驱动、离线缓存或第三方插件的兼容承诺。特别是把取消改为 AbortError 后,调用方若将其当普通错误记录或重试,反而可能制造新的日志噪声和请求风暴。

地形性能也不是单一库版本可以保证的属性。DEM 分辨率、瓦片服务延迟、纹理预算、设备内存、样式复杂度和用户交互同时影响结果。正式地图发布仍需依据目标设备、数据范围和可接受的降级策略完成验收。

资料依据

本文依据 MapLibre GL JS v6.0.0-18 官方发布说明 撰写。预发布状态、发布日期、三个 terrain 优化、取消 GeoJSON worker 请求的泄漏、pending promise、AbortError、提交与验证签名均来自一手发布页;回归场景和升级控制为 WebGIS 生产建议。

结论

地形渲染提速的价值不只在更高帧率,更在快速交互后仍能正确取消和释放资源。把平移中止、DEM内存、纹理和帧时间纳入同一套回归验收,才能让 WebGIS 升级经得起真实用户操作。