ssb: Now add back the about cache, and load times are getting good.
All checks were successful
Build Tilde Friends / Build-All (push) Successful in 31m43s

This commit is contained in:
Cory McWilliams 2025-05-09 13:25:05 -04:00
parent 58c3e6c2ab
commit 8e3bc9d700
2 changed files with 76 additions and 32 deletions

View File

@ -1,5 +1,5 @@
{ {
"type": "tildefriends-app", "type": "tildefriends-app",
"emoji": "🦀", "emoji": "🦀",
"previous": "&NajVQD/6DKISEDlnyAVYh3NPO/vxMN7ksNZy3FwI378=.sha256" "previous": "&VQsPosjAfr008a6UMb8vKmKxE/WS4DRKEspJL8Lewjw=.sha256"
} }

View File

@ -152,7 +152,32 @@ class TfElement extends LitElement {
async fetch_about(following, users) { async fetch_about(following, users) {
let ids = Object.keys(following).sort(); let ids = Object.keys(following).sort();
console.log('loading about for', ids.length, 'accounts'); const k_cache_version = 2;
let cache = await tfrpc.rpc.databaseGet('about');
let original_cache = cache;
cache = cache ? JSON.parse(cache) : {};
if (cache.version !== k_cache_version) {
cache = {
version: k_cache_version,
about: {},
};
}
for (let id of Object.keys(cache.about)) {
if (ids.indexOf(id) == -1) {
delete cache.about[id];
} else {
users[id] = Object.assign(
users[id] || {},
cache.about[id]
);
}
}
let ids_out_of_date = ids.filter(x => cache.about[x]?.seq === undefined || (users[x]?.seq && users[x]?.seq > cache.about[x].seq));
console.log('loading about for', ids.length, 'accounts', ids_out_of_date.length, 'out of date');
if (ids_out_of_date.length) {
try { try {
let rows = await tfrpc.rpc.query( let rows = await tfrpc.rpc.query(
` `
@ -172,7 +197,7 @@ class TfElement extends LitElement {
WHERE rank = 1 WHERE rank = 1
GROUP BY all_abouts.author GROUP BY all_abouts.author
`, `,
[JSON.stringify(ids)] [JSON.stringify(ids_out_of_date)]
); );
users = users || {}; users = users || {};
for (let row of rows) { for (let row of rows) {
@ -180,11 +205,30 @@ class TfElement extends LitElement {
users[row.author] || {}, users[row.author] || {},
JSON.parse(row.about) JSON.parse(row.about)
); );
cache.about[row.author] = Object.assign(
{seq: users[row.author].seq},
JSON.parse(row.about)
);
} }
console.log('updated users');
} catch (e) { } catch (e) {
console.log(e); console.log(e);
} }
}
for (let id of ids_out_of_date) {
if (!cache.about[id]?.seq) {
cache.about[id] = {seq: users[id]?.seq ?? 0};
}
};
let new_cache = JSON.stringify(cache);
if (new_cache != original_cache) {
let start_time = new Date();
tfrpc.rpc.databaseSet('about', new_cache).then(function() {
console.log('saving about took', (new Date() - start_time) / 1000);
});
}
return Object.assign({}, users); return Object.assign({}, users);
} }
@ -365,7 +409,7 @@ class TfElement extends LitElement {
for (let row of info) { for (let row of info) {
users[row.author] = Object.assign( users[row.author] = Object.assign(
{ {
seq: row.max_seq, seq: row.max_sequence,
ts: row.max_ts, ts: row.max_ts,
}, },
users[row.author] users[row.author]