diff --git a/bench.html b/bench.html new file mode 100644 index 000000000..88ae6272b --- /dev/null +++ b/bench.html @@ -0,0 +1,18 @@ + + + + + react-redux benchmark + + +
Loading js...
+
+ + + + + + + + + diff --git a/bench.js b/bench.js new file mode 100644 index 000000000..8fcd53584 --- /dev/null +++ b/bench.js @@ -0,0 +1,69 @@ +var suite = new Benchmark.Suite; + +var benchRes = document.getElementById('res'); + +function reducer(state, action) { + if (!state) state = {toggle: false}; + switch (action.type) { + case 'TOGGLE': + return {toggle: !state.toggle}; + case 'RESET': + return {toggle: false}; + default: + return state; + } +} + +var store = Redux.createStore(reducer); + +var Toggle = React.createClass({ + + render: function() { + return React.createElement('div', null, [this.props.yes ? 'yes' : 'no']); + }, + +}); + +Toggle = ReactRedux.connect(function(state) { + return {yes: state.toggle}; +})(Toggle); + + +ReactDOM.render( + React.createElement( + ReactRedux.Provider, + {store: store}, + React.createElement( + "div", + null, + Array.apply(null, {length: 333}).map(function(_, i) { + return React.createElement(Toggle, {key: i}) + }) + ) + ), document.getElementById('app') +); + + +suite +.add('dispatch', function() { + store.dispatch({type: 'TOGGLE'}); +}) +.add('dispatch batched', function() { + ReactDOM.unstable_batchedUpdates(function() { + store.dispatch({type: 'TOGGLE'}); + }); +}) +.on('cycle', function(event) { + benchRes.innerHTML += String(event.target) + "\n"; +}) +.on('complete', function(e) { + benchRes.innerHTML += '\n'; + benchRes.innerHTML += 'All done!\n\nFastest was: ' + this.filter('fastest').pluck('name'); + benchRes.innerHTML += '\n'; +}) +.on('start', function() { + benchRes.innerHTML = 'Executing the benchmark...\n\n'; +}) +// run async +.run({ 'async': true }); + diff --git a/package.json b/package.json index 38ca8571e..423deee62 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "clean": "rimraf lib dist coverage", "lint": "eslint src test", "prepublish": "npm run clean && npm run build", + "bench": "npm run build && python -m SimpleHTTPServer", "test": "mocha --compilers js:babel/register --recursive", "test:watch": "npm test -- --watch", "test:cov": "babel-node ./node_modules/isparta/bin/isparta cover ./node_modules/mocha/bin/_mocha -- --recursive" @@ -41,6 +42,7 @@ "babel-core": "^5.8.22", "babel-eslint": "^3.1.15", "babel-loader": "^5.3.2", + "benchmark": "^1.0.0", "eslint": "^0.23", "eslint-config-airbnb": "0.0.6", "eslint-plugin-react": "^2.3.0",