Оптимизация кода на jQuery. Часть I.
<script> $el.show(); </script>
<script>
console.time("jquery.fn.show");
$el.show();
console.timeEnd("jquery.fn.show");
</script>
jquery.fn.show: 1.006ms<script> console.profile(); $el.show(); console.profileEnd(); </script>
0.993ms, 12 calls11 calls
12 — это win!
var display = jQuery._data( elem, "olddisplay" );
if ( elem.style.display === "" && isHidden( elem ) ) {
display = css_defaultDisplay(elem.nodeName);
jQuery._data( elem, "olddisplay", display );
}
style="display: none"jQuery.fn.display
jQuery.fn.display = function (value){
var i = this.length, el;
value = typeof value === "string" ? value
: (value ? "" : "none");
while( i-- ){
el = this[i];
el.style && (el.style.display = value);
}
return this;
};
<script> console.profile(); $el.display(true); console.profileEnd(); </script>
0.011ms, 1 call
$el.data("name").$el.data("name") — 1.089ms, 8 calls$el.data("name", "value") — 1.103ms, 17 calls$el.data('id')
вернет 12345678901234567000 (jQuery до 1.7)
jQuery.fn.dataset = function (data, value){
// Реализация на основе dataset
// и getAttribute
};
$el.dataset("id"); // 0.028ms, 1 call
Помимо увелечения производительности кода, вы сокращаете кол-во вызов, уменьшая «шум» при профилировании, а так же при запуске debugger.
github.com/RubaXa