Bitmask.js - Filtering
JavaScript performance comparison
Preparation code
<!-- underscore is only used for the test setup, not the tests -->
<script src="http://underscorejs.org/underscore-min.js"></script>
<script type="text/javascript" src="https://raw.github.com/young-steveo/bitmask.js/0.2/dist/bitmask-0.2.0.js"></script>
<script>
Benchmark.prototype.setup = function() {
var i;
var tags = Math.random().toString(36).substr(2);
// Array test data
var data = [];
for (i = 0; i < 10000; i++){
data.push({
tags : _.unique([
tags[Math.floor(Math.random()*10)],
tags[Math.floor(Math.random()*10)],
tags[Math.floor(Math.random()*10)],
tags[Math.floor(Math.random()*10)],
tags[Math.floor(Math.random()*10)]
])
});
}
// bitmask test data
var masks = [];
for (i = 0; i < 10000; i++){
masks.push({
tags : new Bitmask(data[i].tags).m
});
}
var findData = ['a', 'b'];
var findMask = new Bitmask(findData);
var forLoop = {
all : function(data){
var i, j, length = data.length, innerTags, tagLength, valid, item;
var result = [];
for (i = 0; i < length; i++){
innerTags= data[i].tags;
tagLength = innerTags.length;
valid = true;
for (j = 0; j < tagLength; j++) {
item = innerTags[j];
if (item !== findData[0] && item !== findData[1]){
valid = false;
break;
}
}
if (valid){
result.push(data[i]);
}
}
return result;
},
any : function(data){
var i, j, length = data.length, innerTags, tagLength, valid, item;
var result = [];
for (i = 0; i < length; i++){
innerTags= data[i].tags;
tagLength = innerTags.length;
valid = false;
for (j = 0; j < tagLength; j++) {
item = innerTags[j];
if (item === findData[0] || item === findData[1]){
valid = true;
break;
}
}
if (valid){
result.push(data[i]);
}
}
return result;
},
match : function(data){
var i, j, length = data.length, innerTags, tagLength, valid, item;
var result = [];
for (i = 0; i < length; i++){
innerTags= data[i].tags;
tagLength = innerTags.length;
valid = true;
for (j = 0; j < tagLength; j++) {
item = innerTags[j];
if (item.length !== 2) {
valid = false;
break;
}
if (item !== findData[0] && item !== findData[1]){
valid = false;
break;
}
}
if (valid){
result.push(data[i]);
}
}
return result;
}
};
};
</script>
Preparation code output
Test runner
Warning! For accurate results, please disable Firebug before running the tests. (Why?)
Java applet disabled.
| Test | Ops/sec | |
|---|---|---|
For loop, any |
|
pending… |
Bitmask, any |
|
pending… |
For loop, match |
|
pending… |
Bitmask, match |
|
pending… |
For loop, all |
|
pending… |
Bitmask, all |
|
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 5: published by Stephen Young
0 comments