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
Moves the function definitions out of the running tests.
(Also removing wu, which seems to be breaking.)
<script src="https://rawgit.com/jlongster/transducers.js/master/dist/transducers.js"></script>
<script src="https://rawgit.com/nullobject/fkit/master/dist/fkit.js"></script>
<script src="https://google.github.io/traceur-compiler/bin/traceur-runtime.js"></script>
<script src="//cdn.rawgit.com/suckgamony/fromjs/999e2b611d72e28a997b304f18ee844b93759f54/from.src.js"></script>
<script src="//cdn.rawgit.com/dtao/lazy.js/7a9b0210d97168ff48c5d2b4ce4d12194ba7fbec/lazy.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.8.0/ramda.min.js"></script>
<script src="//cdn.rawgit.com/mihaifm/linq/9c337383e60be3a5560959616bbca51b3eb0d27d/linq.js"></script>
<script src="//cdn.rawgit.com/lodash/lodash/ad10a1eba55e9530a09827549f56d2886a900b7f/lodash.js"></script>
<script src="//cdn.rawgit.com/megawac/ramdash/f4fb017325fea763e50933801b39b586548fbe91/ramda.js"></script>
<script src="//cdn.rawgit.com/Reactive-Extensions/IxJS/es6/dist/ix.js"></script>
<script>var lodash = _.noConflict();</script>
<script src="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.7.0/underscore.js"></script>
<script src="http://nin-jin.github.io/func/index2.js"></script>
<script>
var arr = _.range(100000),
limit = 1000;
var odd = function(v) { return !(v%5) },
square = function(v) { return v * v; };
var r_native = function(arr) {
return arr.map(square).filter(odd).slice(0, limit);
};
console.log('native',r_native(arr))
var r_native2 = function(arr) {
var res = []
for( var i = 0 ; ( i < arr.length ) && ( res.length < limit ) ; ++i ){
var item = square( arr[i] )
if( !odd( item ) ) continue
res.push( item )
}
return res
};
console.log('native2',r_native2(arr))
var r_underscore = function(arr) {
return _(arr).chain().map(square).filter(odd).take(limit).value();
};
console.log('underscore',r_underscore(arr))
var r_Ix = function(arr) {
return Ix.Enumerable.from(arr).map(square).filter(odd).take(limit).toArray();
};
console.log('Ix',r_Ix(arr))
var r_Lazy = function(arr) {
return Lazy(arr).map(square).filter(odd).take(limit).toArray();
};
console.log('Lazy',r_Lazy(arr))
var r_lodash = function(arr) {
return lodash(arr).map(square).filter(odd).take(limit).value();
};
console.log('lodash',r_lodash(arr))
var r_LinqJS = function(arr) {
return Enumerable.from(arr).select(square).where(odd).take(limit).toArray();
};
console.log('LinqJS',r_LinqJS(arr))
var r_Ramda = R.compose(R.take(limit), R.filter(odd), R.map(square));
console.log('Ramda',r_Ramda(arr))
var r_from = function(arr) {
return from(arr).select(square).where(odd).take(limit).toArray();
};
console.log('from',r_from(arr))
var r_Ramdash = ramda.compose(ramda.take(limit), ramda.filter(odd), ramda.map(square));
console.log('Ramdash',r_Ramdash(arr))
var transform = transducers.compose(
transducers.map(square),
transducers.filter(odd),
transducers.take(limit)
);
var r_Transducers = function(arr) {
return transducers.seq(arr, transform);
};
console.log('transducers',r_Transducers(arr))
var r_jin_func = $jin.func.pipeline([
$jin.func.iterator() ,
$jin.func.mapper(square) ,
$jin.func.filter(odd) ,
$jin.func.limiter(limit) ,
$jin.func.collector()
])
console.log('$jin.func',r_jin_func(arr))
var r_FKit = F.compose(F.take(limit), F.filter(odd), F.map(square));
console.log('FKit',r_FKit(arr))
</script>
Ready to run.
Test | Ops/sec | |
---|---|---|
Native |
| ready |
Underscore |
| ready |
Ix |
| ready |
Lazy |
| ready |
Lo-Dash |
| ready |
LinqJS |
| ready |
Ramda |
| ready |
from |
| ready |
Ramdash |
| ready |
Fkit |
| ready |
Transducers |
| ready |
No Dumb Native |
| ready |
$jin.func |
| ready |
You can edit these tests or add more tests to this page by appending /edit to the URL.