Our history implementation can have a non-trivial impact on the browser's performance, not only when actively browsing history or bookmarks, but also in other areas such as (for example) page load, or browser startup / shutdown.
Known Problem Areas
From previous experience, the most-affected areas are outlined below. Special care should be taken to ensure there are no unacceptable regressions in them. However, there may be other performance implications that we do not yet know or anticipate (ideas, anyone?). Please update this page as new information (or new doubts/questions) come up.
In the case of page load, one reason for the performance hit is that links must be colored as visited / not visited when displaying a page, which requires going through history (see Bug #329816).
Brett Wilson's experience here is that places somewhat regresses startup speed when there's no history, but significantly improves it when there is large history.
Browser shutdown can be negatively impacted because expiring history is (or used to be) slow.
The "Clear history" button can be slow.
We must run tests on different environments:
- On Firefox 2.
- On Minefield without Places (the current default).
- On Minefield with Places (with --enable-places).
We also need to run tests with these permutations:
- With little or no history data.
- With a medium or average-sized history file.
- With a large amount of history data.
For certain tests, such as pageload, we also want to test with history data which matches few/some/all links in the pageset, and of which the links of the pageset represent a small/large percentage of the history data itself.
Obviously, there are a lot of permutations of the above :-) So the following could be reduced (suggestions welcome here):
- Limit the tests on Firefox 2 to only a few test environments. e.g., only with medium-sized history data which matches some links of the page set.
- Create "no history", "medium history", and "large history" versions of the pageload test, and possibly startup as well. No need to run all the tests on each permutation.
- Run several tests manually, and if there is no significant difference between them, just leave it at that. Possibly we could drop the different "percentage of matching links" veriations, or at least the "percentage of links vs history db size" ones.
- We could drop any of the above if there is strong agreement within the team that it would not be needed.
Brett Wilson spent a good chunk of time optimizing Places. This bug has some test data: Bug #329816. Note that he times the IsVisited call directly, as the page load tests have too much noise to be useful.
Dan Mills did some preliminary pageload tests on a limited set of environments and came up with these results:
On Firefox 2 w/ my medium-sized history file (baseline): 249.829
- No places, medium history: 236.951
- With places, medium history: 233.097
- No places, small history: 228.829
- With places, small history: 237.829
There are two caveats with the above tests, though:
- The pageset had a very small (~0) percentage of visited links.
- There is no large history file yet, so there's no data for that case.