Generator vs Common Loop (v2)

Revision 2 of this benchmark created on


Preparation HTML

<a href="http://ya.ru/">Я ру</a>
<a href="http://google.ru/">Гугл</a>
<a href="http://habrahabr.ru/">Хабр</a>
<a href="http://twitter.com/">twitter.com</a>

<script type="application/javascript;version=1.7">
var aDomainContentGeneratorWithSameContentAndDomain = function (aList) {
    for (var i = 0, c = aList.length, a, content, domain; i < c; i++) {
        a = aList[i];
        content = a.innerHTML;
        domain = a.getAttribute('href').replace('http://', '').split('/').shift();
        if (content === domain) {
            yield {domain: domain, content: content};
        }
    }        
};

var aDomainContentGenerator = function (aList) {
    for (var i = 0, c = aList.length, a, content, domain; i < c; i++) {
        a = aList[i];
        content = a.innerHTML;
        domain = a.getAttribute('href').replace('http://', '').split('/').shift();
        yield {domain: domain, content: content};
    }        
};
</script>
<script>
  var aList = document.querySelectorAll('a'), devNull;
  var aDomainContentWithSameContentAndDomainFunction = function (aList) {
      for (var i = 0, c = aList.length, a, content, domain; i < c; i++) {
          a = aList[i];
          content = a.innerHTML;
          domain = a.getAttribute('href').replace('http://', '').split('/').shift();
          if (content === domain) {
              devNull = domain;
          }
      }        
  }
</script>

Test runner

Ready to run.

Testing in
TestOps/sec
loop
for (var i = 0, c = aList.length, a, content, domain; i < c; i++) {
    a = aList[i];
    content = a.innerHTML;
    domain = a.getAttribute('href').replace('http://', '').split('/').shift();
    if (content === domain) {
        devNull = domain;
    }
}
ready
generator
var ancors = aDomainContentGeneratorWithSameContentAndDomain(aList);

for (item in ancors) {
    devNull = item.domain;
}
ready
generator with generator expression
var ancors = aDomainContentGenerator(aList);

var ancorsWithSameContentAndDomain = (item for (item in ancors) if (item.content === item.domain));

for (item in ancorsWithSameContentAndDomain) {
    devNull = item.domain;
}
ready
loop function
aDomainContentWithSameContentAndDomainFunction(aList);
ready

Revisions

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