From 5ea2150ae7d05e56191f79ab5f9bda1a69930a1e Mon Sep 17 00:00:00 2001 From: Josh Ponelat Date: Wed, 30 May 2018 22:44:19 +0200 Subject: [PATCH] initial perf, which gets stripped out in production (#4131) --- make-webpack-config.js | 2 +- package.json | 3 ++- src/core/plugins/spec/actions.js | 7 +++++++ src/core/plugins/spec/reducers.js | 10 +++++++++- src/core/system.js | 12 +++++++++--- src/perf.js | 16 ++++++++++++++++ webpack-dist.config.js | 12 +++++++++++- webpack-hot-dev-server.config.js | 2 +- webpack-watch.config.js | 5 +++++ 9 files changed, 61 insertions(+), 8 deletions(-) create mode 100644 src/perf.js diff --git a/make-webpack-config.js b/make-webpack-config.js index 74eae669..6e2c786a 100644 --- a/make-webpack-config.js +++ b/make-webpack-config.js @@ -41,7 +41,7 @@ var commonRules = [ { test: /\.(woff|woff2)(\?.*)?$/, loader: "url-loader?limit=100000" }, { test: /\.(ttf|eot)(\?.*)?$/, - loader: "file-loader" } + loader: "file-loader" }, ] module.exports = function(rules, options) { diff --git a/package.json b/package.json index 9cb1e192..55d55161 100644 --- a/package.json +++ b/package.json @@ -154,7 +154,8 @@ "uglifyjs-webpack-plugin": "^1.2.5", "url-loader": "0.5.9", "webpack": "^2.6.1", - "webpack-bundle-size-analyzer": "^2.5.0" + "webpack-bundle-size-analyzer": "^2.5.0", + "webpack-strip-block": "^0.2.0" }, "config": { "deps_check_dir": ".deps_check" diff --git a/src/core/plugins/spec/actions.js b/src/core/plugins/spec/actions.js index d35e09e5..000458ef 100644 --- a/src/core/plugins/spec/actions.js +++ b/src/core/plugins/spec/actions.js @@ -104,6 +104,10 @@ export const resolveSpec = (json, url) => ({specActions, specSelectors, errActio let specStr = specSelectors.specStr() + /* develblock:start */ + require("root/src/perf").start("resolve") + /* develblock:end */ + return resolve({ fetch, spec: json, @@ -131,6 +135,9 @@ export const resolveSpec = (json, url) => ({specActions, specSelectors, errActio errActions.newThrownErrBatch(preparedErrors) } + /* develblock:start */ + require("root/src/perf").stop("resolve") + /* develblock:end */ return specActions.updateResolved(spec) }) } diff --git a/src/core/plugins/spec/reducers.js b/src/core/plugins/spec/reducers.js index c95c7ce9..b21ab174 100644 --- a/src/core/plugins/spec/reducers.js +++ b/src/core/plugins/spec/reducers.js @@ -42,7 +42,15 @@ export default { }, [UPDATE_RESOLVED]: (state, action) => { - return state.setIn(["resolved"], fromJSOrdered(action.payload)) + /* develblock:start */ + require("root/src/perf").start("UPDATE_RESOLVED") + /* develblock:end */ + const resolved = fromJSOrdered(action.payload) + + /* develblock:start */ + require("root/src/perf").stop("UPDATE_RESOLVED") + /* develblock:end */ + return state.setIn(["resolved"], resolved) }, [UPDATE_RESOLVED_SUBTREE]: (state, action) => { diff --git a/src/core/system.js b/src/core/system.js index 824bc558..61cb6e6b 100644 --- a/src/core/system.js +++ b/src/core/system.js @@ -15,9 +15,15 @@ const idFn = a => a function createStoreWithMiddleware(rootReducer, initialState, getSystem) { let middlwares = [ - // createLogger( { - // stateTransformer: state => state && state.toJS() - // } ), + /* develblock:start */ + // Measure actions + () => next => action => { + require("root/src/perf").start("action:"+action.type) + const res = next(action) + require("root/src/perf").stop("action:"+action.type) + return res + }, + /* develblock:end */ systemThunkMiddleware( getSystem ) ] diff --git a/src/perf.js b/src/perf.js new file mode 100644 index 00000000..484ace63 --- /dev/null +++ b/src/perf.js @@ -0,0 +1,16 @@ +// This uses experimental console methods, to track performance + +module.exports = { + start(str) { + /* develblock:start */ + // eslint-disable-next-line no-console + console.time(str) + /* develblock:end */ + }, + stop(str) { + /* develblock:start */ + // eslint-disable-next-line no-console + console.timeEnd(str) + /* develblock:end */ + } +} diff --git a/webpack-dist.config.js b/webpack-dist.config.js index 391c4a96..a08ed03d 100644 --- a/webpack-dist.config.js +++ b/webpack-dist.config.js @@ -15,7 +15,17 @@ let rules = [ }, { loader: "babel-loader?retainLines=true" } ] - } + }, + // This will strip out blocks of code that start with: + /* develblock:start */ + // And end with + /* develblock:end */ + { + test: /\.jsx?$/, + enforce: "pre", + exclude: /(node_modules|\.spec\.js)/, + loader: "webpack-strip-block" + }, ] rules = rules.concat(styleRules) diff --git a/webpack-hot-dev-server.config.js b/webpack-hot-dev-server.config.js index 5ca1b041..621a5796 100644 --- a/webpack-hot-dev-server.config.js +++ b/webpack-hot-dev-server.config.js @@ -35,7 +35,7 @@ const rules = [ } } ] - } + }, ] module.exports = require("./make-webpack-config")(rules, { diff --git a/webpack-watch.config.js b/webpack-watch.config.js index 2c4bbc94..f9d29b37 100644 --- a/webpack-watch.config.js +++ b/webpack-watch.config.js @@ -5,4 +5,9 @@ config.plugins = config.plugins.filter(plugin => { return plugin.constructor.name !== "UglifyJsPlugin" }) +config.module.rules = config.module.rules.filter(rule => { + // Disable minification + return rule.loader != "webpack-strip-block" +}) + module.exports = config