Startup performance improvements
Speed is a feature. While we try to pay attention to performance when adding new functionality, regressions and unoptimized codepaths do happen. Now and then, we look at critical aspects of the application and refactor, or re-architect portions of our tech stack to become more performant.
This time around, we took a look at startup performance for pre-warmed clients. With pre-warmed, we mean clients that spin up for a subsequent time and thus already have all the workspace data stored in the local database. Pre-warmed startups account for most sessions, making it a great candidate for us to sink our teeth into.
We concentrated our efforts around the following:
- Refactoring and optimizing how we load up data at startup
- Switching from Parcel to Rollup as our build system to improve bundle size
- Lazy loading parts of the application and data that are used infrequently
This resulted in a big improvement in startup performance and memory consumption, especially on Safari and other browsers and our desktop applications. On our own workspace, which has around 4000 issues and hundreds of projects, we saw the following improvements:
Startup time to show active issues
- 59% faster on Safari
- 40-50% faster on other browsers and desktop app
Startup time to show a huge backlog
- 82% faster on Safari
- 60-65% faster on other browsers and desktop app
- 70-80% more efficient across all browsers and desktop apps
Bundle size improvements
We have improved code bundling by targeting only modern browsers, better dead code elimination, and code splitting. We've also made sure to preload code before it's needed. This means we load around 50% less code (30% when compressed). This results in ~10-30% faster page load times from a cold cache, depending on network speed.
- File uploads can now be canceled
- Fixed ability to copy issue URL and ID when the issue is archived
- Fixed a problem where multiple notification emails might have been sent to users
- Added ability to revert to previous versions of issue descriptions. To use it, go to the issue edit screen and choose "Revert issue description" in the command menu.
- When there are no notifications in the inbox, the Notifications drop-down button is no longer visible
- Moving an issue to a different team now adheres to that team's "Active issues are required to belong to a cycle" setting
- Cycles can now be 5 or 7 weeks long
- Whether you create a new template or edit an existing one, you will now be redirected back to the page where you started the template action
- When the search input is focused on small screens, the sidebar is also opened
- API: Fixing a bug with imageUploadFromUrl not working when the source URL contained special characters or a query string