实际应用中,经常会出现海量图层数据导致的页面性能下降的问题,这里我提供几个思路,今天先从Layer层来解决好了。
我们知道,Leaflet支持svg和canvas两种渲染器。正常来说,svg渲染适合少量的,实时配置的动态活跃图层,canvas适合大数据量的静态图层(两者都支持图层响应),两者在地图zoom情况下就存在一定区别。默认情况下,Path和Layer层使用svg渲染。
出现性能下降的情况,主要还是由于过多的svg图层叠加导致,因为CircleMarker无法自定义图标,大家自然而然的去选择Maker图层进行渲染,而这类图层默认都是使用svg,优化Marker便是最简单粗暴的方法了。
以下是优化步骤:
首先,Leaflet原生是不支持Marker使用canvas渲染的,因此我们需要对CircleMarker进行扩展,让其支持自定义图标,这里我就不展开说了,直接给大家推介插件(我还是建议自己去写)leaflet-canvas-markers 扩展完后,可以根据其案例使用canvasMarker,但问题是,该工具(或者说我们自己拓展的CircleMarker),是需要将Path默认设置为canvas才能渲染,既preferCanvas: true。这种全局性的设置我是非常不建议的,假设你地图内存在Path类的动画(如飞线),或多或少会影响到。所以这时我们需要在不使用preferCanvas的情况下,单独控制L.canva