Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support production profiling with React Developer Tools #7737

Merged
merged 12 commits into from Oct 3, 2019
Merged
5 changes: 5 additions & 0 deletions docusaurus/docs/available-scripts.md
Expand Up @@ -22,6 +22,11 @@ Builds the app for production to the `build` folder. It correctly bundles React

The build is minified and the filenames include the hashes. See the [production build](production-build.md) section for more information.

React DOM automatically supports profiling in development mode for v16.5+, but since profiling adds some small
JacobMGEvans marked this conversation as resolved.
Show resolved Hide resolved
additional overhead it is opt-in for production mode. You can opt-in by using the `--profile` flag. Use `npm run build -- --profile` or `yarn build --profile` to enable profiling in production mode. You can read more about profiling
using the React.
JacobMGEvans marked this conversation as resolved.
Show resolved Hide resolved
DevTools here: https://reactjs.org/docs optimizing-performance.html#profiling-components-with-the-devtools-profiler

Your app is ready to be deployed! See the section about [deployment](deployment.md) for more information about deploying your application to popular hosting providers.

## `npm run eject`
Expand Down
13 changes: 13 additions & 0 deletions packages/react-scripts/config/webpack.config.js
Expand Up @@ -66,6 +66,11 @@ module.exports = function(webpackEnv) {
const isEnvDevelopment = webpackEnv === 'development';
const isEnvProduction = webpackEnv === 'production';

// Variable used for enabling profiling in Production
// passed into alias object. Uses a flag if passed into the build command
const isEnvProductionProfile =
isEnvProduction && process.argv.includes('--profile');

// Webpack uses `publicPath` to determine where the app is being served from.
// It requires a trailing slash, or the file assets will get an incorrect path.
// In development, we always serve from the root. This makes config easier.
Expand Down Expand Up @@ -234,6 +239,9 @@ module.exports = function(webpackEnv) {
mangle: {
safari10: true,
},
// Added for profiling in devtools
keep_classnames: isEnvProductionProfile,
keep_fnames: isEnvProductionProfile,
output: {
ecma: 5,
comments: false,
Expand Down Expand Up @@ -303,6 +311,11 @@ module.exports = function(webpackEnv) {
// Support React Native Web
// https://www.smashingmagazine.com/2016/08/a-glimpse-into-the-future-with-react-native-for-web/
'react-native': 'react-native-web',
// Allows for better profiling with ReactDevTools
...(isEnvProductionProfile && {
'react-dom$': 'react-dom/profiling',
'scheduler/tracing': 'scheduler/tracing-profiling',
}),
},
plugins: [
// Adds support for installing with Plug'n'Play, leading to faster installs and adding
Expand Down