Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Cache micromatch in SearchSource globsToMatcher
I was profiling some Jest runs at Airbnb and noticed that on my MacBook Pro, we can spend over 2 seconds at Jest startup time in SearchSource getTestPaths. I believe that this will grow as the size of the codebase increases. Looking at the call stacks, it appears to be calling micromatch repeatedly, which calls picomatch, which builds a regex out of the globs. It seems that the parsing and regex building also triggers the garbage collector frequently. Upon testing, I noticed that the globs don't actually change between these calls, so we can safe a bunch of work by making a micromatch matcher and reusing that function if the globs haven't changed. In my basic testing, it is always called with the same set of globs, so I went with a very simple last-used memoization instead of a more robust caching solution. In my profiling of this change locally, this brings down the time of startRun from about 2000ms to about 200ms.
- Loading branch information