ssb: Faster loads around the profile page. An experiment with caching SQL queries, and make one query just plain faster.
All checks were successful
Build Tilde Friends / Build-All (push) Successful in 8m53s

This commit is contained in:
2025-11-16 14:20:26 -05:00
parent aea4a14a62
commit 35f374047a
3 changed files with 44 additions and 11 deletions

View File

@@ -37,16 +37,22 @@ class TfProfileElement extends LitElement {
this.following = undefined;
this.blocking = undefined;
let latest = (
await tfrpc.rpc.query('SELECT MAX(rowid) AS latest FROM messages')
)[0].latest;
let result = await tfrpc.rpc.query(
`
SELECT json_extract(content, '$.following') AS following
FROM messages WHERE author = ? AND
json_extract(content, '$.type') = 'contact' AND
json_extract(content, '$.contact') = ? AND
following IS NOT NULL
following IS NOT NULL AND
messages.rowid <= ?
ORDER BY sequence DESC LIMIT 1
`,
[this.whoami, this.id]
[this.whoami, this.id, latest],
{cacheable: true}
);
this.following = result?.[0]?.following ?? false;
result = await tfrpc.rpc.query(
@@ -55,10 +61,12 @@ class TfProfileElement extends LitElement {
FROM messages WHERE author = ? AND
json_extract(content, '$.type') = 'contact' AND
json_extract(content, '$.contact') = ? AND
blocking IS NOT NULL
blocking IS NOT NULL AND
messages.rowid <= ?
ORDER BY sequence DESC LIMIT 1
`,
[this.whoami, this.id]
[this.whoami, this.id, latest],
{cacheable: true}
);
this.blocking = result?.[0]?.blocking ?? false;
}
@@ -238,7 +246,7 @@ class TfProfileElement extends LitElement {
let profile = this.users[this.id] || {};
tfrpc.rpc
.query(
`SELECT SUM(LENGTH(content)) AS size, MAX(sequence) AS sequence FROM messages WHERE author = ?`,
`SELECT size AS size, max_sequence AS sequence FROM messages_stats WHERE author = ?`,
[this.id]
)
.then(function (result) {