jsPerf.app is an online JavaScript performance benchmark test runner & jsperf.com mirror. It is a complete rewrite in homage to the once excellent jsperf.com now with hopefully a more modern & maintainable codebase.
jsperf.com URLs are mirrored at the same path, e.g:
https://jsperf.com/negative-modulo/2
Can be accessed at:
https://jsperf.app/negative-modulo/2
Compare performance of the better-dom library and jquery and now mootools in typical cases
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.js"></script>
<script src="//rawgithub.com/chemerisuk/better-dom/v1.2.0/better-dom.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/mootools/1.4.5/mootools-yui-compressed.js"></script>
<script>
//added table case
//experimental function I just wrote...
(function(){
function tableFix(match, text) {
var container = new Element('table');
var tag = match[1].toLowerCase();
if (['td', 'th', 'tr'].contains(tag)){
container = new Element('tbody').inject(container);
if (tag != 'tr') container = new Element('tr').inject(container);
}
return container.set('html', text).getChildren();
}
var range = document.createRange();
if(range.createContextualFragment) {//not supported on ie<9
// make the parent of the first div in the document becomes the context node
var reference = document.getElement("div");
range.selectNode(reference);
Elements.from2 = function(text, excludeScripts) {
if (excludeScripts == true) text = text.stripScripts();
var match = text.match(/^\s*<(t[dhr]|tbody|tfoot|thead)/i);
if(match) return tableFix(match,text);
var elements = range.createContextualFragment(text).childNodes;
return new Elements(elements);
};
//no table support
Elements.from2nt = function(text, excludeScripts) {
if (excludeScripts == true) text = text.stripScripts();
var elements = range.createContextualFragment(text).childNodes;
return new Elements(elements);
};
} else {
/*
---
script: Elements.From.js
name: Elements.From
description: Returns a collection of elements from a string of html.
license: MIT-style license
authors:
- Aaron Newton
requires:
- Core/String
- Core/Element
- /MooTools.More
provides: [Elements.from, Elements.From]
...
*/
Elements.from2 = function(text, excludeScripts){
if (excludeScripts == true) text = text.stripScripts();
var match = text.match(/^\s*<(t[dhr]|tbody|tfoot|thead)/i);
if(match) return tableFix(match,text);
return new Element('div').set('html', text).getChildren();
};
}
Elements.fromnt = function(text, excludeScripts){
if (excludeScripts == true) text = text.stripScripts();
return new Element('div').set('html', text).getChildren();
};
Elements.from = function(text, excludeScripts){
if (excludeScripts == true) text = text.stripScripts();
var match = text.match(/^\s*<(t[dhr]|tbody|tfoot|thead)/i);
if(match) return tableFix(match,text);
return new Element('div').set('html', text).getChildren();
};
})();
</script>
Ready to run.
Test | Ops/sec | |
---|---|---|
jquery#create(HtmlString) |
| ready |
DOM#create(HtmlString) |
| ready |
jquery#create(Options) |
| ready |
DOM#create(Options) |
| ready |
DOM#create(EmmetString) |
| ready |
Element.from(html str) |
| ready |
Elements.from2(html str) |
| ready |
Elements.from (no table suppport) |
| ready |
Elements.from2 (no table suppport) |
| ready |
You can edit these tests or add more tests to this page by appending /edit to the URL.