Doge log

Abby CTO 雑賀 力王のオフィシャルサイトです

DOMで取得する速度を上げる その1

ぬ。

  mouseover_menu1.__name = 'mouseover_menu2';
  mouseout_menu1.__name = 'mouseout_menu2';
  mouseover_menu1.registEvent(this);
  mouseout_menu1.registEvent(this);
  mouseover_menu1.__name = 'mouseover_menu3';
  mouseout_menu1.__name = 'mouseout_menu3';
  mouseover_menu1.registEvent(this);
  mouseout_menu1.registEvent(this);

こーいうのださいので改造すべし。
そもそもidにこだわる理由は性能なんだよ。
idで複数指定できりゃあいいんだよね。
で爆速にこだわってる人があのAlex大先生なわけなんだけど。
Alex大先生のblogにも書かれているけど要は

全部idで引け

え?idって一意だから…って感じだけど

function elementsById(id){
  var nodes = [];
  var tmpNode = document.getElementById(id);
  while(tmpNode){
    nodes.push(tmpNode);
    tmpNode.id = "";
    tmpNode = document.getElementById(id);
  }
  for(var x=0; x<nodes .length; x++){
    nodes[x].id = id;
  }
  return nodes;
}

こうやると複数指定でいけるんじゃね?みたいな。
実際にこのテクは使われてる箇所があって、あまり知られていないかも知れないけどdojoにもbehaviorが存在してるんです。
中を見るとapplyFastとかslowとかわかりやすいですなw
classNameでやるとおっせーみたいな。
なのでKumuでもid複数対応はとりあえずやろうかなと。
追記
dojo.behaviorはExperimentalレベルだそうです。

うくく。