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 に向かいます。