maptalks.js
maptalks.js copied to clipboard
VectorLayer share canvas
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)
test demo mtksharecanvas.zip
收到! 因为涉及到底层调用,如果代码影响范围比较广,我建议把这个功能做成一个新的类。
收到! 因为涉及到底层调用,如果代码影响范围比较广,我建议把这个功能做成一个新的类。
即使拆成一个新的layer,map的render逻辑还是要改下的,所以。。。,我把代码给过来,你看看,代码变动不大
我去业务里跑跑看看