Server rendering is slower with npm react
See original GitHub issueI ran a few benchmarks on the server (modifying https://github.com/paulshen/react-bench to not use jsdom). The results were surprising, as the browserified react.js
was about 30% faster than the npm version, even with NODE_ENV=production
.
The performance ranking (test run time) was react.min.js
< react.js
< NODE_ENV=production node react
< node react
.
I suspect process.env
is not a regular js object but perhaps a getter and thus carries a penalty when you test for "production" !== process.env.NODE_ENV
everywhere.
Also the minified version might still perform best of all, as at least some time ago V8 used function source length (including comments) as a heuristic for function complexity / compilation time and thus affecting chances for optimization in some cases, but the effect might be negligible.
Issue Analytics
- State:
- Created 10 years ago
- Reactions:10
- Comments:59 (24 by maintainers)
@mhart Technically you can fix the problem in your own code by doing
process.env = JSON.parse(JSON.stringify(process.env))
, converting it from a live object that callsgetenv
down a plain JS object. You’ll get the same performance benefits, with the only downside that any code that was relying on live edits to the env (does anyone really do that?) will fail.Referencing https://github.com/facebook/fbjs/pull/86 which will fix this now that UglifyJS can properly eliminate dev code (even if it references a
var
that never changes) with its newreduce_vars
option, which is a default.See https://github.com/facebook/fbjs/pull/86#issuecomment-285204734 for more context.