From fb69196f961eeaa30432c33db3003effcdbced53 Mon Sep 17 00:00:00 2001 From: Peter Stone Date: Sat, 22 Aug 2026 00:57:20 +0000 Subject: 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. --- app/src/main/java/org/terst/feedreader/ui/ArticleListScreen.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'app/src/main/java/org/terst/feedreader/ui') 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()) -- cgit v1.2.3