YUI v3.8.0 vs. jQuery v1.8.2 vs Dojo 1.8.0 DOM queries (v47)

Revision 47 of this benchmark created by YUI-fix on


Description

Fixed issues with the tests which causes incorrect results:

  • All but the native selector were not actually selecting anything since they were just querying the index.

  • dojo test was returning the query object rather then actually executing the callback block

Rev.47:

  • Updated YUI to v3.8.0

  • Changed to use Y.all, which is consistent with other implementations.

  • Made more fair to YUI by calling .use() once and storing it, as opposed to previous behavior which caused .use() to be called on every benchmark sample. (Someone else might want to do the same for Dojo; it looks like it's being required on every sample as well.)

Preparation HTML

<script src="//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script src="http://yui.yahooapis.com/3.8.0/build/yui/yui-min.js"></script>
<script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/dojo/1.8.0/dojo/dojo.js"></script>

<div id="test">
  <div class="testlink">
    <a href="#" id="linkone" title="test">test link</a>
  </div>
  <div class="testmenu">
    <ul>
      <li class="menuitem itemone">
        <a href="#" title="item 1">menu item 1</a>
      </li>
      <li class="menuitem itemtwo">
        <a href="#" title="item 2">menu item 2</a>
      </li>
      <li class="menuitem itemthree">
        not clickable item 3
      </li>
    </ul>
  </div>
</div>

Setup

var selectors = ['body', 'div', 'body div', 'div a', 'div > a', 'div[class^=test]', 'div, li, a', '.menuitem', 'li.menuitem', '#linkone', 'div#test', 'a[title*=item]', 'a[title=test]', 'li:nth-child(even)', 'li:nth-child(odd)', 'li:last-child', 'li:first-child'], Y = YUI().use('node');

Test runner

Ready to run.

Testing in
TestOps/sec
jQuery v1.8.2
for (var sel in selectors) {
  $(selectors[sel]).length;
}
ready
YUI v3.8.0
for (var sel in selectors) {
  Y.all(selectors[sel]).length;
}
ready
Dojo 1.8
require(["dojo/query"], function(query) {
  for (var sel in selectors) {
    query(selectors[sel]).length
  }
});
ready
querySelectorAll
for (var sel in selectors) {
   document.querySelectorAll(selectors[sel]).length;
};
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.