Performance Test Results
Comparable browser performance measurements for Mosmox UI and popular React, Vue, and Angular UI frameworks.
This page contains reproducible local measurements for Mosmox UI and nine popular React, Vue, and Angular UI solutions. The results compare this specific workload, machine, browser, dependency lockfile, and viewport—not every possible use case. A separate button stress test is included below; it is intentionally not merged into the production-like ranking.
Test workload
Every implementation renders the same production page with 500 interactive cards, a filter input, a toggle, and four equivalent test actions. Playwright opens each page in headless Chrome at 1440×900, waits for the application-ready marker, and performs five runs per implementation.
Measured values:
- Cold load — time from navigation until the page is loaded and ready.
- App ready — time until the first application-ready marker after render.
- Local update — time to update one local control without changing the card collection.
- Bulk update — time after changing the content revision of all 500 visible cards.
- Filter update — time to filter the collection to the matching cards.
- Toggle update — time to toggle the controlled state.
- DOM nodes — number of DOM nodes after the initial render.
- Transfer — bytes transferred for page resources.
- JS heap — approximate JavaScript heap usage reported by Chrome.
Browser render speed ranking
Because the primary goal of this benchmark is browser rendering speed, the main ranking is ordered by App ready: the time until the first complete application-ready marker after the initial render. Cold load is shown as a secondary loading signal. Lower values are better.
| Rank | Implementation | App ready | Cold load | Bulk update | DOM nodes | Transfer | JS heap |
|---|---|---|---|---|---|---|---|
| 1 | Mosmox UI | 46 ms | 88 ms | 97 ms | 2,536 | 409.1 KB | 4.9 MB |
| 2 | React · MUI | 79 ms | 129 ms | 117 ms | 2,537 | 349.0 KB | 12.8 MB |
| 3 | Angular · Material | 92 ms | 125 ms | 93 ms | 4,070 | 465.3 KB | 8.1 MB |
| 4 | Vue · Element Plus | 101 ms | 114 ms | 117 ms | 3,038 | 511.0 KB | 14.0 MB |
| 5 | Angular · NG-ZORRO | 112 ms | 138 ms | 95 ms | 2,538 | 996.1 KB | 14.2 MB |
| 6 | Vue · Quasar | 115 ms | 139 ms | 119 ms | 3,545 | 479.1 KB | 15.2 MB |
| 7 | React · Ant Design | 117 ms | 167 ms | 128 ms | 3,052 | 553.5 KB | 25.8 MB |
| 8 | Angular · PrimeNG | 124 ms | 150 ms | 92 ms | 2,038 | 343.6 KB | 16.0 MB |
| 9 | React · Chakra UI | 149 ms | 159 ms | 125 ms | 2,536 | 500.0 KB | 18.7 MB |
| 10 | Vue · Vuetify | 214 ms | 237 ms | 177 ms | 8,065 | 508.8 KB | 44.9 MB |
After removing the redundant simple-button wrapper, Mosmox UI remains first for initial browser render at 46 ms and now matches Chakra UI's DOM count at 2,536 nodes. The five-run median still shows other libraries leading some specialized interaction paths, so those results remain separate rather than being folded into a synthetic overall score.
Visual comparison
The charts below make the most important timing differences easier to scan. Each chart uses one scale for all implementations; a shorter bar means a faster result. The primary render chart and the interaction charts are separate tests.
Browser render speed ranking
App ready
Initial application-ready marker · lower is betterCold load
Navigation to loaded page · lower is betterBulk update
Update all 500 cards · lower is betterDOM nodes
Initial rendered document size · lower is betterTransfer
Transferred page resources · lower is betterJS heap
Measured JavaScript heap · lower is betterButton stress test
2,000 direct Button components · five-run medians
Button app ready
Initial render of 2,000 buttons · lower is betterUpdate 2,000 buttons
Mass label update · lower is betterButton DOM nodes
Initial rendered document size · lower is betterButton JS heap
Measured JavaScript heap · lower is betterReact frameworks
| Rank | Implementation | Cold load | App ready | Bulk update | DOM nodes | Transfer | JS heap |
|---|---|---|---|---|---|---|---|
| 1 | React · MUI | 129 ms | 79 ms | 117 ms | 2,537 | 349.0 KB | 12.8 MB |
| 2 | React · Ant Design | 167 ms | 117 ms | 128 ms | 3,052 | 553.5 KB | 25.8 MB |
| 3 | React · Chakra UI | 159 ms | 149 ms | 125 ms | 2,536 | 500.0 KB | 18.7 MB |
Vue frameworks
| Rank | Implementation | Cold load | App ready | Bulk update | DOM nodes | Transfer | JS heap |
|---|---|---|---|---|---|---|---|
| 1 | Vue · Element Plus | 114 ms | 101 ms | 117 ms | 3,038 | 511.0 KB | 14.0 MB |
| 2 | Vue · Quasar | 139 ms | 115 ms | 119 ms | 3,545 | 479.1 KB | 15.2 MB |
| 3 | Vue · Vuetify | 237 ms | 214 ms | 177 ms | 8,065 | 508.8 KB | 44.9 MB |
Angular frameworks
| Rank | Implementation | Cold load | App ready | Bulk update | DOM nodes | Transfer | JS heap |
|---|---|---|---|---|---|---|---|
| 1 | Angular · Material | 125 ms | 92 ms | 93 ms | 4,070 | 465.3 KB | 8.1 MB |
| 2 | Angular · NG-ZORRO | 138 ms | 112 ms | 95 ms | 2,538 | 996.1 KB | 14.2 MB |
| 3 | Angular · PrimeNG | 150 ms | 124 ms | 92 ms | 2,038 | 343.6 KB | 16.0 MB |