diff --git a/scripts/bench/README.md b/scripts/bench/README.md index 52a5f6db317..bfe049add05 100644 --- a/scripts/bench/README.md +++ b/scripts/bench/README.md @@ -2,11 +2,21 @@ Work-in-progress benchmarks. ## Running the suite +You'll need two folders to compare, each of them containing `react.min.js` and `react-dom-server.min.js`. You can run `npm run build` at the repo root to get a `build` folder with these files. + +For example, if you want to compare a stable verion against master, you can create folders called `build-stable` and `build-master` and use the benchmark scripts like this: + ``` -$ ./measure.py react-a.min.js a.txt react-b.min.js b.txt -$ ./analyze.py a.txt b.txt +$ ./measure.py build-stable stable.txt build-master master.txt +$ ./analyze.py stable.txt master.txt ``` +The test measurements (second argument to `analyze`, `master.txt` in this example) will be compared to the control measurements (first argument to `analyze`, `stable.txt` in this example). + +Changes with the `-` sign in the output mean `master` is faster than `stable`. + +You can name folders any way you like, this was just an example. + ## Running one One thing you can do with them is benchmark initial render time for a realistic hierarchy: diff --git a/scripts/bench/measure.py b/scripts/bench/measure.py index c6346139b62..613cb98e4e1 100755 --- a/scripts/bench/measure.py +++ b/scripts/bench/measure.py @@ -73,12 +73,14 @@ def _run_js_in_node(js, env): def _measure_ssr_ms(engine, react_path, bench_name, bench_path, measure_warm): return engine( """ - var reactCode = readFile(ENV.react_path); + var reactCode = readFile(ENV.react_path + '/react.min.js'); + var reactDOMServerCode = readFile(ENV.react_path + '/react-dom-server.min.js'); var START = now(); globalEval(reactCode); + globalEval(reactDOMServerCode); var END = now(); - ReactDOMServer = React.__SECRET_DOM_SERVER_DO_NOT_USE_OR_YOU_WILL_BE_FIRED || React; - if (typeof React !== 'object') throw new Error('React not laoded'); + if (typeof React !== 'object') throw new Error('React not loaded'); + if (typeof ReactDOMServer !== 'object') throw new Error('ReactDOMServer not loaded'); report('factory_ms', END - START); globalEval(readFile(ENV.bench_path)); @@ -117,7 +119,7 @@ def _measure_ssr_ms(engine, react_path, bench_name, bench_path, measure_warm): def _main(): if len(sys.argv) < 2 or len(sys.argv) % 2 == 0: - sys.stderr.write("usage: measure.py react.min.js out.txt react2.min.js out2.txt\n") + sys.stderr.write("usage: measure.py build-folder-a a.txt build-folder-b b.txt\n") return 1 # [(react_path, out_path)] react_paths = sys.argv[1::2] @@ -142,7 +144,10 @@ def _main(): sys.stderr.write("\n") sys.stderr.flush() + # You can set this to a number of trials you want to do with warm JIT. + # They are disabled by default because they are slower. trials = 0 + sys.stderr.write("Measuring SSR for PE with warm JIT (%d slow trials)\n" % trials) sys.stderr.write("_" * trials + "\n") for i in range(trials):