前回同様、O’REILLYの「JavaScriptグラフィックス」1章効率化についてメモ。
キモは
- 「要素が見つかったら極力再検索しない」
- 「要素の追加は、文字列で一括して行う」
1.要素の検索について
$('#elem1').css('color' , '#ff0000');//赤
$('#elem1').css('color' , '#00FF00');//緑
$('#elem1').css('color' , '#0000FF');//青
$('#elem1').css('left' , '100px');//x座標を動かす
このサンプルではelem1を毎回検索しているので、効率が悪い。
そこで検索結果を変数に保存する。
$alien=$('#elem1');
となる。
※ここまでは想像していたのだが、この章の説明は検索範囲の指定まで踏み込んでいる。
曰く「jQueryが検索する要素の範囲を指定したほうが速い」。
$alien=$(‘#element1′ , container);//特定のDOM要素から検索する
個人的にはあまり使わないような気がするが一応覚えておく。
まだjQueryのcss()関数が残っている。これも変数に格納。
var elemStyle=$('#elem1')[0].style;
そしてcssスタイルを設定する。
elemStyle.color='#ff0000'; elemStyle.color='#00ff00'; elemStyle.color='#0000ff'; elemStyle.left='100px';
(なぜかelemStyle.colorをアラート表示できない)
2.要素の追加は文字列で一括して行う
DOMへの要素挿入は遅いので、
文字列+=追加文字列
で文字列を作成し、
$elem.append(文字列);
で一気に追加する。
これらを踏まえたサンプル。
http://nouv.biz/labo/20120908_jQuery_speed/ex0100_css.html
css操作はcssが設定されていないと動作しないので注意。コードは以下のとおり。
[html]
<div id=”element1”><div>
[css]
#element1{
position:absolute;
left:0;
top:0;
font-size:80px;
color: #000000;
}
[JavaScript]
var $elem;//jQueryから取得
var elemStyle;//取得した要素のスタイル
var divs='';//追加する要素
//検索し、変数に格納 idを取得しているのに、配列のようなものになるらしい
$elem=$('#element1');
//$elem[0].addEventListener("click" , onClicked , false);
AddEvent.addEvent($elem[0] , "click" , onClicked);//オリジナルクラス
//変数からstyleを格納
//var elemStyle=$elem.style;
//Debugger.log(elemStyle);//undefinedになる
var elemStyle=$elem[0].style;//なぜか添字0をつけなければならない。
Debugger.log(elemStyle);
//makeDivs
//makeDivs
for(var i=0 ; i divs+=''//文字列追加省略
}
function onClicked(event){
Debugger.log("clicked");
elemStyle.color="#ff0000";
elemStyle.left="50px";
elemStyle.top="50px";
$elem.append(divs);
}