Firefox 3.6 was released today! For me, the most important changes in this release are the performance and stability improvements. On Mac especially, there are some big improvements in startup time, yielding up to 30% faster startup generally. And on both Mac and Windows, we fixed some pathologically bad startup scenarios.
The list of bugs fixed that specifically affect startup time is here, however a few should be called out individually:
- Ted Mielczarek and Drew Willcoxon combined all .xpt files into a single one, reducing the number of files read from the disk at startup.
- Rob Strong removed the need for services to load at startup for timer registration, reducing the number of files read from disk at startup, as well as reducing the amount of JavaScript executed. There are still services that need to be ported to this new scheme, so expect more improvements here.
- Vlad Vukicevic found that on Mac it could take up to a whole second to initialize Growl, if present. His fix initializes Growl on demand.
- Joel Reymont found that up to 10% of startup time on Mac was in the initialization of fonts. John Daggett and Jonathan Kew did some great work to reduce the problem in Firefox 3.6. They subsequently modified font loading on Mac to occur on-demand, so the next release will be even faster.
- Joel also found that up to 12% of startup on Mac was spent in some APIs that were only needed for debugging. The problem was quickly fixed by Masayuki Nakano.
- Taras Glek and Alfred Kayser spent a bunch of time improving the performance of how JARs are loaded and read from. The infrastructure improvements made are paying off as we move more groups of small files into these archives, reducing the number of individual file operations that occur at startup time.
On Windows, it was found that a large portion of startup time was spent in the security libraries, building up entropy by trawling through IE's cache folder and the Windows temp directory. Some Windows users reported upwards of 25k files in their temp directories, so you can imagine the delays that this behavior was causing for some users. The behavior is now fixed. The full list of bugs fixed in Firefox 3.6 with the "perf" keyword is here. These range from improvements to web page loading times, general UI responsiveness, and improvements to specific UI actions such as searching History and Bookmarks:
One of the biggest improvements is that Shawn Wilsher ported all of the Awesomebar code to JavaScript and moved the queries that build up the results to a background thread. This resulted in a massive improvement in UI responsiveness when typing in the location bar.
- Another infrastructural improvement that will affect general responsiveness is Marco Bonardo's work to clean up the bookmarks and history database periodically.
- Per-tab-network-prioritization is the long way of saying that Firefox will prioritize the network traffic of pages you are currently interacting with. Paul O'Shannessy explains the feature here, and was able to finish it up in time to make 3.6.
- Finally, there are a TON of performance improvements to the JavaScript engine, which benefit just about every area of the browser, from startup time to page loading to extensions. Dave Mandelin put up a detailed post on Hacks.Mozilla.org last week that explains it all. And all of this is just a taste of what's to come: Over 60% of the bugs fixed as part of our focus on startup performance have landed on trunk, but didn't make it in time for the 3.6 release. You can follow along on the wiki page for the startup project, and here on my blog, where I post status updates every Friday.