MapEasy拖动时内存优化一则

MapEasy设计上小巧精悍,但是内存性能方面没有充分考虑。尤其当拖动地图时,内存无极增加。

 

尽管MapPaneWidget.js代码中,存在如下移除旧瓦片功能,但是似乎根本不起作用。

for (var i = 0;i < oldTileNodes.length;i++) {
   if (oldTileNodes[i] != null) {
    mapDiv.removeChild(oldTileNodes[i]);
   }
  }

 

仅针对拖动地图方面的测试,如果要使上段代码起到效果,需mapDIV添加瓦片时,不给瓦片添加事件处理,如下修改:

 

if (isExist == false) {
     offsetX = tiles[i].getColumn() * MapModel.tileSize;
     offsetY = tiles[i].getRow() * MapModel.tileSize;
     //var tile = document.createElement("div");//QIU mark
     var tile = document.createElement("img");
     tile.src = tiles[i].getSrc();
     tile.id = tileId;
     tile.style.position = "absolute";
     tile.style.left = offsetX + "px";
     tile.style.top = offsetY + "px";
     /*tile.onmousedown = function() {
      return false;
     };*/
     mapDiv.appendChild(tile);
     //var tileImage = document.createElement("img");
     //tileImage.src = tiles[i].getSrc();
     /*tileImage.onmousedown = function() {
      return false;
     }*/
     //tile.appendChild(tileImage);
    }

貌似因为事件处理对象的循环引用,而照成的内存无法释放。

参考如下JS中内存泄露模式介绍。

http://www.ibm.com/developerworks/cn/web/wa-memleak/index.html?S_TACT=105AGX52&S_CMP=techcsdn

如果需要考虑Firefox等浏览器的操作,为瓦片添加onmousedown处理函数时,最好如下:

{...

     tile.style.left = offsetX + "px";
     tile.style.top = offsetY + "px";
     tile.onmousedown = nullOperation;

....}

 

function nullOperation() {
      return false;
     };

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值