2006-06-30
要素をキャッシュして $ 関数をちょっと高速化
prototype.js の $ 関数で
あっちこっちで、$、$、ってやるとその都度ノード探索発生してうざいので
↓prototype.js 1.5 の $ 関数
function $() {
var results = [], element;
for (var i = 0; i < arguments.length; i++) {
element = arguments[i];
if (typeof element == 'string')
element = document.getElementById(element);
results.push(Element.extend(element));
}
return results.length < 2 ? results[0] : results;
}
キャッシュしてみますた。
でも、IDがダイナミックに変更される場合(あんまないでしょ)はダメ
↓要素のキャッシュ化
$.cache = {};
function $() {
var results = [], element;
for (var i = 0; i < arguments.length; i++) {
element = arguments[i];
if (typeof element == 'string') {
var cache = arguments.callee.cache;
element = cache[element] || (cache[element] = document.getElementById(element));
}
results.push(Element.extend(element));
}
return results.length < 2 ? results[0] : results;
}
さらに、
細かな高速化、二箇所
$.cache = {};
function $() {
var results = [], element;
for (var i = 0, len = arguments.length; i < len; i++) {
element = arguments[i];
if (typeof element == 'string') {
var cache = arguments.callee.cache;
element = cache[element] || (cache[element] = document.getElementById(element));
}
results[i] = Element.extend(element);
}
return results.length < 2 ? results[0] : results;
}
引数に id を指定すると内部的に $ が呼ばれているので、そういう場合はけっこう早くなるかも
では、そろそろ Shibuya.JS に向かいます。
トラックバック - http://d.hatena.ne.jp/amachang/20060630/1151652800
リンク元
- 139 http://reader.livedoor.com/reader/
- 82 http://d.hatena.ne.jp/
- 68 http://www.atmarkit.co.jp/fwcr/rensai/ajaxwatch09/01.html
- 37 http://b.hatena.ne.jp/
- 33 http://shibuyajs.org/articles/2006/06/15/technical-talk-2
- 32 http://jsgt.org/mt/archives/01/001174.html
- 28 http://b.hatena.ne.jp/entrylist?sort=hot
- 16 http://shibuyajs.org/
- 10 http://jsgt.org/mt/archives/01/001175.html
- 9 http://d.hatena.ne.jp/keyword/shibuya.js
