Speed up event match regex evaluation for big messages
`regex.containsMatchIn()` for `.*@room.*` can take significantly longer than checking for `@room` (some real-world events I was getting took around 15 seconds with this, significantly slowing down the sync parsing). Checking `containsMatchIn()` does not lead to different results when having leading and trailing stars however, it will match in the same cases as when these are omitted. For testing purposes, I sent myself some Lorem Ipsum with 5000 words (not containing any @room). Without this change, the regex evaluation takes about 16 seconds. With this change, the regex evaluation now takes significantly less then a second.
This commit is contained in:
parent
c40fc52ef5
commit
af34399135
1
changelog.d/5008.bugfix
Normal file
1
changelog.d/5008.bugfix
Normal file
@ -0,0 +1 @@
|
|||||||
|
Big messages taking inappropriately long to evaluate .m.rule.roomnotif push rules
|
@ -56,7 +56,12 @@ class EventMatchCondition(
|
|||||||
if (wordsOnly) {
|
if (wordsOnly) {
|
||||||
value.caseInsensitiveFind(pattern)
|
value.caseInsensitiveFind(pattern)
|
||||||
} else {
|
} else {
|
||||||
val modPattern = if (pattern.hasSpecialGlobChar()) pattern.simpleGlobToRegExp() else "*$pattern*".simpleGlobToRegExp()
|
val modPattern = if (pattern.hasSpecialGlobChar())
|
||||||
|
// Regex.containsMatchIn() is way faster without leading and trailing
|
||||||
|
// stars, that don't make any difference for the evaluation result
|
||||||
|
pattern.removePrefix("*").removeSuffix("*").simpleGlobToRegExp()
|
||||||
|
else
|
||||||
|
pattern.simpleGlobToRegExp()
|
||||||
val regex = Regex(modPattern, RegexOption.DOT_MATCHES_ALL)
|
val regex = Regex(modPattern, RegexOption.DOT_MATCHES_ALL)
|
||||||
regex.containsMatchIn(value)
|
regex.containsMatchIn(value)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user