Lazily compile regexes to prevent expensive compilation at import. #95
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Currently all regexes are compiled at module import, which leads to intensive compilation of all possible regexes at module import.
In local testing on my dev machine this leads to importing
ua_parser
taking ~2.5 seconds.Deferring regex compilation has two benefits:
One possible future optimization based on this would be to do some sort of ordering of parsers based on browser/os/device prevalence to ensure that common lookups require less compilation, but as the ordering is determined in uap_core, and sensitive to the needs of potentially conflicting regexes, I did not make any attempt to implement that here.