maptalks.js icon indicating copy to clipboard operation
maptalks.js copied to clipboard

VectorLayer share canvas

Open deyihu opened this issue 3 years ago • 4 comments

maptalks's version and what browser you use?

Issue description

Multiple vectorlayers share a canvas, which can greatly reduce memory consumption and improve rendering performance

   function randomLngLats() {
            const { x, y } = map.getCenter();
            const lnglats = [];
            while (lnglats.length < 10) {
                const lng = x + Math.random() * 1, lat = y + Math.random();
                lnglats.push([lng, lat]);
            }
            return lnglats;
        }

        function addLayers() {
            for (let i = 0, len = 200; i < len; i++) {
                const layer = new maptalks.VectorLayer('layer' + i, {
                    shareCanvas: true
                });
                const points = randomLngLats().map(coordiante => {
                    return new maptalks.Marker(coordiante);
                });
                layer.addTo(map);
                layer.addGeometry(points);
            }
        }

  addLayers();

memory consumption 3300mb before optimization and 500MB after optimization

Please provide a reproduction URL (on any jsfiddle like site)

deyihu avatar Feb 06 '22 10:02 deyihu

test demo mtksharecanvas.zip

deyihu avatar Feb 07 '22 06:02 deyihu

收到! 因为涉及到底层调用,如果代码影响范围比较广,我建议把这个功能做成一个新的类。

fuzhenn avatar Feb 08 '22 01:02 fuzhenn

收到! 因为涉及到底层调用,如果代码影响范围比较广,我建议把这个功能做成一个新的类。

即使拆成一个新的layer,map的render逻辑还是要改下的,所以。。。,我把代码给过来,你看看,代码变动不大

deyihu avatar Feb 08 '22 01:02 deyihu

我去业务里跑跑看看

deyihu avatar Feb 08 '22 02:02 deyihu