• 
      

    Speed up extension loading in tests by caching a URL.

    Review Request #11313 — Created Dec. 1, 2020 and submitted — Latest diff uploaded

    Information

    Djblets
    release-2.0.x

    Reviewers

    ExtensionManager.get_absolute_url() returns the URL pointing to the
    extension manager UI, and to do this it uses a standard URL lookup.

    However, there's a problem with this. When we initialize an extension,
    we add any URLs it defines and we then flush the URL cache, requiring it
    to be rebuilt for any new lookups. We do the same thing when we
    uninitialize a URL.

    In unit tests, we enable and disable extensions all the time, at least
    once per test. This means that testing an extension with custom URLs or
    an admin UI configuration or database page is terribly slow, as it's
    constantly clearing, re-building, and clearing the cache.

    Not all unit tests need the cache to be rebuilt. To avoid this,
    get_absolute_url() now caches the result after the first lookup (since
    the extension manager UI isn't going to be moving around).

    This makes a huge difference. One extension's test suite dropped from 8
    minutes to 2, just from this cached variable.

    Unit tests passed.

    Tested with a couple extensions and saw significant improvements to test
    speed (averaging a 75% reduction in test time).

    Commits

    Files