Massively improves the boot speed by: (#41)

1. ignoring duplicated events coming to the client
2. avoiding checking for trust in disk for every event (uses a simple cache)
This commit is contained in:
Vitor Pamplona
2025-05-21 20:18:09 -04:00
committed by GitHub
parent b0a6b73801
commit 45564c7722
2 changed files with 19 additions and 5 deletions

View File

@@ -1,6 +1,6 @@
use std::{
cmp::Reverse,
collections::{BTreeMap, HashMap},
collections::{BTreeMap, HashMap, HashSet}
};
use account::Account;
@@ -181,6 +181,7 @@ impl ChatRegistry {
let events = send_events.merge(recv_events);
let mut room_map: HashMap<u64, (Event, usize, bool)> = HashMap::new();
let mut trusted_keys: HashSet<PublicKey> = HashSet::new();
// Process each event and group by room hash
for event in events
@@ -189,10 +190,18 @@ impl ChatRegistry {
{
let hash = room_hash(&event);
// Check if room's author is seen in any contact list
let filter = Filter::new().kind(Kind::ContactList).pubkey(event.pubkey);
// If room's author is seen at least once, mark as trusted
let is_trust = client.database().count(filter).await? >= 1;
let mut is_trust = trusted_keys.contains(&event.pubkey);
if is_trust == false {
// Check if room's author is seen in any contact list
let filter = Filter::new().kind(Kind::ContactList).pubkey(event.pubkey);
// If room's author is seen at least once, mark as trusted
is_trust = client.database().count(filter).await? >= 1;
if is_trust {
trusted_keys.insert(event.pubkey);
}
}
room_map
.entry(hash)

View File

@@ -147,6 +147,8 @@ fn main() {
let new_id = SubscriptionId::new(NEW_MESSAGE_SUB_ID);
let mut notifications = client.notifications();
let mut processed_events: HashSet<EventId> = HashSet::new();
while let Ok(notification) = notifications.recv().await {
if let RelayPoolNotification::Message { message, .. } = notification {
match message {
@@ -154,6 +156,9 @@ fn main() {
event,
subscription_id,
} => {
if processed_events.contains(&event.id) { continue }
processed_events.insert(event.id);
match event.kind {
Kind::GiftWrap => {
let event = match get_unwrapped(event.id).await {