$(this) or collection-faking
JavaScript performance comparison
Info
Testing/profiling the code patterns from the Script Junkie article "(pre)Maturely Optimize Your JavaScript"
Snippet comparison #3
Preparation code
<script src="//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<style>
.foo { color:blue; }
.other { color:red; }
</style>
<p><a href="#">link</a></p><p>blah</p><p><a href="#" rel="foo">link</a></p><p>blah</p>
<p><a href="#" rel="bar">link</a></p><p>blah</p><p><a href="#" rel="wee">link</a></p><p>blah</p>
<p><a href="#">link</a></p><p>blah</p><p><a href="#" rel="foo">link</a></p><p>blah</p>
<p><a href="#" rel="bar">link</a></p><p>blah</p><p><a href="#" rel="wee">link</a></p><p>blah</p>
<p><a href="#">link</a></p><p>blah</p><p><a href="#" rel="foo">link</a></p><p>blah</p>
<p><a href="#" rel="bar">link</a></p><p>blah</p><p><a href="#" rel="wee">link</a></p><p>blah</p>
<p><a href="#">link</a></p><p>blah</p><p><a href="#" rel="foo">link</a></p><p>blah</p>
<p><a href="#" rel="bar">link</a></p><p>blah</p><p><a href="#" rel="wee">link</a></p><p>blah</p>
<p><a href="#">link</a></p><p>blah</p><p><a href="#" rel="foo">link</a></p><p>blah</p>
<p><a href="#" rel="bar">link</a></p><p>blah</p><p><a href="#" rel="wee">link</a></p><p>blah</p>
<p><a href="#">link</a></p><p>blah</p><p><a href="#" rel="foo">link</a></p><p>blah</p>
<p><a href="#" rel="bar">link</a></p><p>blah</p><p><a href="#" rel="wee">link</a></p><p>blah</p>
<p><a href="#">link</a></p><p>blah</p><p><a href="#" rel="foo">link</a></p><p>blah</p>
<p><a href="#" rel="bar">link</a></p><p>blah</p><p><a href="#" rel="wee">link</a></p><p>blah</p>
<p><a href="#">link</a></p><p>blah</p><p><a href="#" rel="foo">link</a></p><p>blah</p>
<p><a href="#" rel="bar">link</a></p><p>blah</p><p><a href="#" rel="wee">link</a></p><p>blah</p>
<p><a href="#">link</a></p><p>blah</p><p><a href="#" rel="foo">link</a></p><p>blah</p>
<p><a href="#" rel="bar">link</a></p><p>blah</p><p><a href="#" rel="wee">link</a></p><p>blah</p>
<p><a href="#">link</a></p><p>blah</p><p><a href="#" rel="foo">link</a></p><p>blah</p>
<p><a href="#" rel="bar">link</a></p><p>blah</p><p><a href="#" rel="wee">link</a></p><p>blah</p>
<p><a href="#">link</a></p><p>blah</p><p><a href="#" rel="foo">link</a></p><p>blah</p>
<p><a href="#" rel="bar">link</a></p><p>blah</p><p><a href="#" rel="wee">link</a></p><p>blah</p>
<p><a href="#">link</a></p><p>blah</p><p><a href="#" rel="foo">link</a></p><p>blah</p>
<p><a href="#" rel="bar">link</a></p><p>blah</p><p><a href="#" rel="wee">link</a></p><p>blah</p>
<p><a href="#">link</a></p><p>blah</p><p><a href="#" rel="foo">link</a></p><p>blah</p>
<p><a href="#" rel="bar">link</a></p><p>blah</p><p><a href="#" rel="wee">link</a></p><p>blah</p>
<p><a href="#">link</a></p><p>blah</p><p><a href="#" rel="foo">link</a></p><p>blah</p>
<p><a href="#" rel="bar">link</a></p><p>blah</p><p><a href="#" rel="wee">link</a></p><p>blah</p>
<p><a href="#">link</a></p><p>blah</p><p><a href="#" rel="foo">link</a></p><p>blah</p>
<p><a href="#" rel="bar">link</a></p><p>blah</p><p><a href="#" rel="wee">link</a></p><p>blah</p>
<p><a href="#">link</a></p><p>blah</p><p><a href="#" rel="foo">link</a></p><p>blah</p>
<p><a href="#" rel="bar">link</a></p><p>blah</p><p><a href="#" rel="wee">link</a></p><p>blah</p>
<p><a href="#">link</a></p><p>blah</p><p><a href="#" rel="foo">link</a></p><p>blah</p>
<p><a href="#" rel="bar">link</a></p><p>blah</p><p><a href="#" rel="wee">link</a></p><p>blah</p>
<p><a href="#">link</a></p><p>blah</p><p><a href="#" rel="foo">link</a></p><p>blah</p>
<p><a href="#" rel="bar">link</a></p><p>blah</p><p><a href="#" rel="wee">link</a></p><p>blah</p>
<p><a href="#">link</a></p><p>blah</p><p><a href="#" rel="foo">link</a></p><p>blah</p>
<p><a href="#" rel="bar">link</a></p><p>blah</p><p><a href="#" rel="wee">link</a></p><p>blah</p>
<p><a href="#">link</a></p><p>blah</p><p><a href="#" rel="foo">link</a></p><p>blah</p>
<p><a href="#" rel="bar">link</a></p><p>blah</p><p><a href="#" rel="wee">link</a></p><p>blah</p>
<p><a href="#">link</a></p><p>blah</p><p><a href="#" rel="foo">link</a></p><p>blah</p>
<p><a href="#" rel="bar">link</a></p><p>blah</p><p><a href="#" rel="wee">link</a></p><p>blah</p>
<p><a href="#">link</a></p><p>blah</p><p><a href="#" rel="foo">link</a></p><p>blah</p>
<p><a href="#" rel="bar">link</a></p><p>blah</p><p><a href="#" rel="wee">link</a></p><p>blah</p>
<p><a href="#">link</a></p><p>blah</p><p><a href="#" rel="foo">link</a></p><p>blah</p>
<p><a href="#" rel="bar">link</a></p><p>blah</p><p><a href="#" rel="wee">link</a></p><p>blah</p>
<p><a href="#">link</a></p><p>blah</p><p><a href="#" rel="foo">link</a></p><p>blah</p>
<p><a href="#" rel="bar">link</a></p><p>blah</p><p><a href="#" rel="wee">link</a></p><p>blah</p>
<p><a href="#">link</a></p><p>blah</p><p><a href="#" rel="foo">link</a></p><p>blah</p>
<p><a href="#" rel="bar">link</a></p><p>blah</p><p><a href="#" rel="wee">link</a></p><p>blah</p>
<script>
var $a = $(0);
function fn_1() {
var $a = $(this);
if ($a.attr("rel") == "foo") {
$a.addClass("foo");
}
else {
$a.addClass("other");
}
}
function fn_2() {
$a.context = $a[0] = this; // fake the collection object
if ($a.attr("rel") == "foo") {
$a.addClass("foo");
}
else {
$a.addClass("other");
}
}
</script>
Preparation code output
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
blah
Test runner
Warning! For accurate results, please disable Firebug before running the tests. (Why?)
Java applet disabled.
| Test | Ops/sec | |
|---|---|---|
$(this) |
|
pending… |
$a.context = $a[0] = this |
|
pending… |
Compare results of other browsers
Revisions
You can edit these tests or add even more tests to this page by appending /edit to the URL. Here’s a list of current revisions for this page:
- Revision 1: published by Kyle Simpson and last updated
- Revision 5: published by Rick Waldron
- Revision 6: published by Kyle Simpson
- Revision 8: published by Paul Grenier
0 comments