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
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.32/browser.js"></script>
<script src="https://fb.me/react-0.14.3.js"></script>
<script src="https://fb.me/react-dom-0.14.3.js"></script>
<script src="https://rawgit.com/Riim/rista/master/rista.js"></script>
<div style="height: 200px; overflow: hidden;">
<rista-test-app></rista-test-app>
<div id="react-test-app"></div>
</div>
<script type="text/babel">
(function () {
let SEX_ALL = -1;
let SEX_MALE = 0;
let SEX_FEMALE = 1;
const appModel = window.reactAppModel = {
friends: [
{id: 1, name: 'Костя', sex: SEX_MALE, online: true},
{id: 2, name: 'Миша', sex: SEX_MALE, online: false},
{id: 3, name: 'Настя', sex: SEX_FEMALE, online: false},
{id: 4, name: 'Даша', sex: SEX_FEMALE, online: true},
{id: 5, name: 'Евгений', sex: SEX_MALE, online: true}
],
filterOptionSex: SEX_ALL,
filterOptionOnline: false
};
const bus = window.reactBus = {
_list: [],
addChangeListener(callback) {
bus._list.push(callback);
},
emitChanged() {
const list = bus._list;
let idx = list.length;
while (idx--) {
list[idx]();
}
}
};
const FriendList = React.createClass({
render() {
return <ul>{this.props.items.map(user => <li key={user.id}>{user.name}</li>)}</ul>;
}
});
const TestApp = React.createClass({
componentDidMount() {
bus.addChangeListener(() => this.forceUpdate());
},
_onInputSexChange(evt) {
appModel.filterOptionSex = +evt.target.value;
bus.emitChanged();
},
_onInputOnlineChange(evt) {
appModel.filterOptionOnline = +evt.target.checked;
bus.emitChanged();
},
getFilteredFriends() {
return appModel.friends.filter(user => {
if (appModel.filterOptionSex != SEX_ALL && user.sex != appModel.filterOptionSex) {
return false;
}
if (appModel.filterOptionOnline && !user.online) {
return false;
}
return true;
});
},
render() {
return (
<div>
<fieldset>
<legend>Фильтры</legend>
<p>
<select onChange={this._onInputSexChange}>
<option value={SEX_ALL}>Все</option>
<option value={SEX_MALE}>Мальчик</option>
<option value={SEX_FEMALE}>Девочка</option>
</select>
</p>
<p>
<label>
<input checked={appModel.filterOptionOnline} type="checkbox" onChange={this._onInputOnlineChange}/>
Онлайн
</label>
</p>
</fieldset>
<FriendList items={this.getFilteredFriends()}/>
</div>
);
}
});
ReactDOM.render(<TestApp/>, window['react-test-app']);
})();
</script>
<script type="text/es7">
(function () {
let d = rista.d;
let SEX_ALL = -1;
let SEX_MALE = 0;
let SEX_FEMALE = 1;
class User {
@d.observable name = undefined;
@d.observable sex = undefined;
@d.observable online = undefined;
constructor(data) {
for (let name in data) {
this[name] = data[name];
}
}
}
let appModel = window.observableAppModel = {
@d.observable viewerFriends: rista.list([
new User({ name: 'Костя', sex: SEX_MALE, online: true }),
new User({ name: 'Миша', sex: SEX_MALE, online: false }),
new User({ name: 'Настя', sex: SEX_FEMALE, online: false }),
new User({ name: 'Даша', sex: SEX_FEMALE, online: true }),
new User({ name: 'Евгений', sex: SEX_MALE, online: true })
]),
@d.observable filterOptionSex: SEX_ALL,
@d.observable filterOptionOnline: false
};
rista.component('rista-test-app', {
renderInner() {
return `
<fieldset>
<legend>Фильтры</legend>
<p>
<select rt-change="_onInputSexChange">
<option value="${SEX_ALL}" selected>Все</option>
<option value="${SEX_MALE}">Мальчик</option>
<option value="${SEX_FEMALE}">Девочка</option>
</select>
</p>
<p>
<label><input ${appModel.filterOptionOnline ? 'checked' : ''} type="checkbox" rt-change="_onInputOnlineChange"> Онлайн</label>
</p>
</fieldset>
<friend-list></friend-list>
`;
},
_onInputSexChange(evt) {
appModel.filterOptionSex = +evt.target.value;
},
_onInputOnlineChange(evt) {
appModel.filterOptionOnline = evt.target.checked;
}
});
rista.component('friend-list', {
@d.computed filteredViewerFriends: function() {
return appModel.viewerFriends.filter(user => {
if (appModel.filterOptionSex != SEX_ALL && user.sex != appModel.filterOptionSex) {
return false;
}
if (appModel.filterOptionOnline && !user.online) {
return false;
}
return true;
});
},
renderInner() {
return `<ul>${this.filteredViewerFriends.map(user => `<li>${user.name}</li>`).join('')}</li>`;
}
});
})();
</script>
<script>
Array.prototype.forEach.call(document.querySelectorAll('script[type="text/es7"]'), function(script) {
babel.run(script.innerHTML, {
optional: ['es7.classProperties', 'es7.decorators', 'es7.functionBind']
});
});
</script>
Ready to run.
Test | Ops/sec | |
---|---|---|
React |
| ready |
Rista |
| ready |
You can edit these tests or add more tests to this page by appending /edit to the URL.