#10266·Leaflet

通过懒加载更新 DOM 来提高 Control.Layers 的性能

作者: KrausMatthias创建于 2026年6月21日更新于 2026年7月8日
标签featureneeds triage
  • 核对表

-[x]我通过plugins搜索过,以确保这个功能还没有可用,或者认为它不应该需要插件.

动机

我的应用程序迭代地增加了数以百计的多层控制(使用https://GitHub.com/KrausMatthias/Leaflet.OGCAPI).

这非常缓慢,因为层控空并重制出每个添加的重叠上的全部重叠列表.

建议的解决办法

我做了一个小包装 如果控制中心已经倒闭 就会延迟重新投放 使负载瞬间消失 如果有兴趣的话,我可以在L控制中心 建立上游的公关 层 (也指v2).

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你来干什么? 导出让 LazyLayer Control = L. Control.Layers.extend({) 初始化: 函数( baseLayers, 覆盖, 选项) { 此. 已修改为虚假; 返回 L. Control.Layers. prototype.初始化.call(这个, BaseLayers, 覆盖, 选项) ; {\fn华文楷体\fs16\1cHE0E0E0}

is collapsed: 函数 () { 返回 ! DomUtil. hasClass( 此选项为“ 叶片控制层扩展” ) ; {\fn华文楷体\fs16\1cHE0E0E0}

添加复数: 函数( layer, name) { 此. addLayer( 层, 名, 真名);

/ 只有在地图和扩展中添加控制时更新 dom 如果( this. map %! this.is collapsed ()) { 返回此值。 update (); {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}当然 这个... 修改后==真; 返回此项; {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? {\fn华文楷体\fs16\1cHE0E0E0}

扩展: 函数 () { 如果( 此. 已修改) { 此. 更新( I) ; {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? L. Control.Layers.prototype.expand.call(本); {\fn华文楷体\fs16\1cHE0E0E0}

更新: 函数 () { L. Control.Layers.prototype.update. call(本); 3⁄4 ̄ ̧漯B {\fn华文楷体\fs16\1cHE0E0E0} ) (中文(简体) ).


考虑的替代品

人们还可以考虑重新制定更新逻辑,以避免在每次修改时重新创建DOM中的完整层列表. 这将需要更多的努力,并且对破裂的风险更大.

内容来源: Leaflet/Leaflet