如何在地图上打点数百万条数据

要将大量数据打点到地图上,原以为添加多个IFrame,充分利用多进程的优势,可以增加打点的数量与速度,结果大相径庭,Iframe数量越多,性能越差,具体测试数据如下,消耗时间单位为毫秒:

打点数量\窗口数量1个窗口4个窗口16个窗口
10000051711673662
200000162233195342
4000003241815910516
5000004018815910307
10000080649575624555

可见,超过400000个数量后,打点等待的时间都过长,对用户而言,几乎处于不可用的状态。

改进方案1: 增量打点

将所有的大数据点划分为多个批次,依次打入,如将400000个节点划分为40次,每次10000个点依次打入(此数字还可以调优),总共消耗的时间为3019(带有一定的随机性),竟然性能还略有提升,更重要的是,用户的体验提升了很多,依据JS的主线程理论,其他的代码也有机会得到执行,不会产生卡死或长期等待的现象,效果如下所示。
多批量打点示例
示例代码如下:

var inv = 0,
    perDots = 10000, // 每次打点数量
    times = Math.ceil(counter / perDots);   //  总共打点次数
//  定义定时器   
var timer = setInterval(function() {
    //  结束定时器
    if(inv == times) {
        clearInterval(timer)
        return;
    }
    for(var i = 0; i < perDots; i ++) {
        //  数据打点
        Drawer.drawPoint(Math.round(Math.random() * Drawer.width), Math.round(Math.random() * Drawer.height))
    }
    times ++;
    //  统计技术数据
    parent.Tester.addTime(Date.now())
}, 1)

按照此种方式,打点的数量还可以继续增加,初步测试,打点1000000条数据基本无压力。

改进方案2: 服务器渲染

将地图与所有的数据在数据器渲染完成,然后发送到客户端,这样能充分发挥服务器多线程的优势,尤其在巨型图布局时优势明显,例如上数十万个节点的拓扑图,更能一次渲染,多次使用(易于缓存),但问题在于对浏览器分辨率的适应性不好。

结论

从以上的测试可以看出,在浏览器上大批量数据打点,最消耗的不是CPU,而是GPU的运作。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值