diff options
| author | Peter Stone <thepeterstone@gmail.com> | 2026-08-22 00:57:20 +0000 |
|---|---|---|
| committer | Peter Stone <thepeterstone@gmail.com> | 2026-08-22 00:57:20 +0000 |
| commit | fb69196f961eeaa30432c33db3003effcdbced53 (patch) | |
| tree | f5cba3621eeeab583effd800a34dfcfb97e0baad /app/src/main/java/org/terst/feedreader/ui | |
| parent | 00d873a3c5709200451c74b46860a67c1c1a52c7 (diff) | |
Pre-compile filter rules instead of re-lowercasing per article per emission
ArticleListScreen calls evaluate() once per visible article against the
same rule set, re-run on essentially any read-state change to any
article in the list. With a couple hundred articles and a handful of
rules, calling pattern.lowercase() inside the old per-article evaluate()
was thousands of redundant String allocations of the same small set
of strings.
Diffstat (limited to 'app/src/main/java/org/terst/feedreader/ui')
| -rw-r--r-- | app/src/main/java/org/terst/feedreader/ui/ArticleListScreen.kt | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/app/src/main/java/org/terst/feedreader/ui/ArticleListScreen.kt b/app/src/main/java/org/terst/feedreader/ui/ArticleListScreen.kt index a852288..6f2db12 100644 --- a/app/src/main/java/org/terst/feedreader/ui/ArticleListScreen.kt +++ b/app/src/main/java/org/terst/feedreader/ui/ArticleListScreen.kt @@ -72,7 +72,8 @@ fun ArticleListScreen( } val visibleArticles by remember(feedId) { combine(articleFlow, db.filterRuleDao().observeAll()) { articles, rules -> - articles.map { it to FilterRuleEngine.evaluate(it, rules) } + val compiledRules = FilterRuleEngine.compile(rules) + articles.map { it to FilterRuleEngine.evaluate(it, compiledRules) } .filter { (_, result) -> result != FilterResult.MUTED } } }.collectAsState(initial = emptyList()) |
