You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
We don't currently have a way to measure Fluent UI control performance in the context of an application. All Fluent UI pull requests currently have two performance related gates:
Bundle size allows us to track component and overall package size and flamegraphs give us information about the performance of an individual component but neither of these give us good insight into the overall performance of Fluent UI components when combined together to build an application.
We need a sample test bed application that will be used to analyze the client-side rendering performance of Fluent UI components so we can understand how changes to Fluent UI are likely to impact real world applications. This test bed application will be a "representative application" in that, while it is simplified for ease of testing, it is complex enough to be a stand-in for an actual production application. This can include things like a large DOM structure with lots of nesting, using hundreds of controls and having multiple views.
This deliverable will allow us to start establishing performance baselines and give us insights to move forward with future performance improvements like reducing rendering time and improved performance automation.
Appetite
4 weeks
Solution
This solution will deliver an application in the Fluent monorepo that can be used for manual performance testing. Manual performance testing includes, but is not necessarily limited to, using tools like DevTools' Performance tab, React's Profiler and edge://tracing to profile applications and identify areas for improvement.
This solution is a first step in and the results may serve as the foundation for future work or take us in an entirely different direction.
Pick a tool for creating static applications (e.g., Create React App, Create Next App, etc.)
Establish the criteria for a "representative application"
Build a representative application using Fluent UI React v9 controls
Build a representative application using Fluent UI React v8 controls
Document a basic manual profiling process
Risks (Rabbit holes)
Hypotheticals: it's really easy to start thinking about writing tests to cover regressions, automating this work etc. While it's good to give some consideration to the future, this project is already fairly wide in scope so we need to focus on the identified deliverable over the potential for this work in the future.
Making performance changes: while doing this work we'll likely identify ways to improve Fluent's performance. This work isn't meant to provide recommendations for improving perf, though if something is simple and/or a huge improvement we can make a separate issue for it.
Out of scope (No-gos)
While this project has a concrete deliverable it is also exploratory in nature and as such it has some explicit non-goals.
Automated testing: this issue is focused on manual testing as it's not clear what good automated performance tests look like.
Performance Recommendations/Improvements: ultimately this work is the foundation for us to be able to make recommendations and improvements to Fluent UI's performance but this stage of the work is focused on establishing the foundation and working toward baselines.
Problem
We don't currently have a way to measure Fluent UI control performance in the context of an application. All Fluent UI pull requests currently have two performance related gates:
Bundle size allows us to track component and overall package size and flamegraphs give us information about the performance of an individual component but neither of these give us good insight into the overall performance of Fluent UI components when combined together to build an application.
We need a sample test bed application that will be used to analyze the client-side rendering performance of Fluent UI components so we can understand how changes to Fluent UI are likely to impact real world applications. This test bed application will be a "representative application" in that, while it is simplified for ease of testing, it is complex enough to be a stand-in for an actual production application. This can include things like a large DOM structure with lots of nesting, using hundreds of controls and having multiple views.
This deliverable will allow us to start establishing performance baselines and give us insights to move forward with future performance improvements like reducing rendering time and improved performance automation.
Appetite
4 weeks
Solution
This solution will deliver an application in the Fluent monorepo that can be used for manual performance testing. Manual performance testing includes, but is not necessarily limited to, using tools like DevTools' Performance tab, React's Profiler and edge://tracing to profile applications and identify areas for improvement.
This solution is a first step in and the results may serve as the foundation for future work or take us in an entirely different direction.
Risks (Rabbit holes)
Out of scope (No-gos)
While this project has a concrete deliverable it is also exploratory in nature and as such it has some explicit non-goals.