Performance is a critical factor in the usability and efficiency of any software, and Burp Suite is no exception. We've recently focused on enhancing Burp Suite's performance across several key areas and have made significant strides in reducing processing times, minimizing memory usage, and ensuring a smoother user experience. Read on for a deep dive into a couple of the performance issues we tackled in recent releases.
Tables are a core component of Burp Suite. Most of the data produced in Burp is presented in table format. Being able to manipulate this data through sorting is key to many users’ workflows. This section details our approach to the problem and the measurable improvements in performance.
The main issue with table sorting stemmed from how data retrieval and sorting operations were handled. Sorting a table on a large project file caused numerous slow and repetitive disk retrievals, significantly hindering performance. When multiple column sorts were applied, it required up to two to three times more data retrievals, exacerbating the problem.
One of the most frustrating issues was the user interface (UI) freezing during these operations. Since the sorting was happening on the UI thread, Burp would become unresponsive. This would also occur on almost all table operations such as inserts and removes since the new values needed to be sorted too. This led to a poor experience, as users could be left unsure whether Burp Suite had crashed or if it was still processing.
To address these issues, we undertook a series of technical improvements focused on optimizing data retrieval, offloading processing from the UI thread, and enhancing visual feedback.
The changes we implemented resulted in significant improvements to table sorting performance. Here are some key results:
To monitor the results of performance improvements, we have introduced a suite of tests and dashboards that reflect how changes in the codebase affect typical workflows across Burp. This not only allows us to quantify the value of the improvements made but also helps us prevent regressions in performance.
Our performance tests demonstrated these gains, which showed the drastic reduction in sorting times and the improved responsiveness of the UI. These results underscore the effectiveness of our approach and the tangible benefits to our users.
Repeater is a core part of Burp Suite used for manually modifying and re-sending HTTP requests – it's often key to a pentester's workflow. And, just like a web browser over time, users can (accidentally or otherwise) end up with a lot of Repeater tabs, which we weren't handling the best.
When loading Burp Suite, we would previously load one set of UI (user interface) components for each Repeater tab you had. Unfortunately, this meant if you had a lot of Repeater tabs in your project file, then memory usage and the time taken to load up Burp would be significantly impacted, as each set of components would eat up a bit of memory.
It could also lead to general UI lag in the background too, even if you weren't actively using Repeater, which can lead to understandable frustration when using Burp.
We've carried out work to try to fix the problem by changing how Repeater tabs are represented internally. Now, we only use one set of UI components, with each Repeater tab only holding onto its individual tab state, such as your selected text, selected editor views, and edit history. This means that there are significant memory savings if you have a large number of tabs. We're now also a bit cleverer about making sure a tab uses no resources until it is clicked on for the first time.
There should be no changes to how Repeater appears to function on the outside, hopefully the only thing you'll notice is the performance improvements!
Like with the table sorting work, we've set up automated regression tests to notify us if performance ever degrades. These track both the time taken and memory used when starting a project file with 300 Repeater tabs. We've noticed dramatic improvements in tab operations generally too, such as duplicating or closing group tabs.
We've seen significant improvements on both the memory and performance fronts, and we've also made our thresholds for performance much stricter here, meaning we should never go back to where we were before.
We've done a lot more work on the way for performance. In particular, we've also made improvements to rendering large response bodies within the message editor, the speed of site map filtering, and the memory usage of simple word lists in Intruder.