Performance Comparer is a tool for measuring and comparing the performance of React components using Playwright and PerformanceObserver.
Main stages:
-
Metrics Collection
- Uses
PerformanceObserver
to trackmeasure
events (custom measurements) - All metrics are stored in the global
__PERFORMANCE_METRICS__
object
- Uses
-
Measured Indicators
- Rendering time (ms)
- Average value
- Minimum value
- Maximum value
- Number of DOM nodes in the component
- Rendering time (ms)
-
Measurement Process
- Test runs the specified number of times
- For each run:
- PerformanceObserver is initialized
- Component rendering is executed
- All metrics are collected
- Total rendering time is calculated
- Results are aggregated and saved in the report
- Node.js >= 20
- Playwright
- Docker (for running in container)
All environment variables must be defined in the .env
file:
REPEAT_EACH=1 # Number of repetitions for each test
VITE_AVATAR_NODES_COUNT=1000 # Number of nodes for Avatar component
VITE_BUTTON_NODES_COUNT=1000 # Number of nodes for Button component
VITE_CHECKBOX_NODES_COUNT=1000 # Number of nodes for Checkbox component
VITE_LABEL_NODES_COUNT=1000 # Number of nodes for Label component
VITE_LINK_NODES_COUNT=1000 # Number of nodes for Link component
VITE_NUMBER_INPUT_NODES_COUNT=1000 # Number of nodes for NumberInput component
VITE_RADIO_GROUP_NODES_COUNT=1000 # Number of nodes for RadioGroup component
VITE_SWITCH_NODES_COUNT=1000 # Number of nodes for Switch component
VITE_TEXT_NODES_COUNT=1000 # Number of nodes for Text component
VITE_TEXT_INPUT_NODES_COUNT=1000 # Number of nodes for TextInput component
VITE_TEXT_AREA_NODES_COUNT=1000 # Number of nodes for TextArea component
# Install dependencies
npm run playwright:install
# Clear cache (if needed, for example when .env file changes)
npm run playwright:clear-cache
# Run tests locally
npm run playwright
# Run tests in Docker
npm run playwright:docker
Test results will be displayed in the console after successful test completion.
The reports present performance testing results for the following UI libraries: antd, @gravity-ui/uikit, @mui/material, @adobe/react-spectrum: