perf: get rid of more calls, fix other profile pages #12632

This commit is contained in:
Barış Soner Uşaklı
2024-06-11 16:07:10 -04:00
parent 66adfa2999
commit 5c6a853e94
10 changed files with 28 additions and 36 deletions

View File

@@ -12,9 +12,9 @@ blocksController.getBlocks = async function (req, res) {
const resultsPerPage = 50; const resultsPerPage = 50;
const start = Math.max(0, page - 1) * resultsPerPage; const start = Math.max(0, page - 1) * resultsPerPage;
const stop = start + resultsPerPage - 1; const stop = start + resultsPerPage - 1;
const payload = res.locals.userData;
const { uid, username, userslug, blocksCount } = payload;
const { uid, username, userslug, blocksCount } = await user.getUserFields(res.locals.uid, ['uid', 'username', 'userslug', 'blocksCount']);
const payload = {};
const uids = await user.blocks.list(uid); const uids = await user.blocks.list(uid);
const data = await plugins.hooks.fire('filter:user.getBlocks', { const data = await plugins.hooks.fire('filter:user.getBlocks', {
uids: uids, uids: uids,

View File

@@ -9,7 +9,8 @@ const meta = require('../../meta');
const categoriesController = module.exports; const categoriesController = module.exports;
categoriesController.get = async function (req, res) { categoriesController.get = async function (req, res) {
const { username, userslug } = await user.getUserFields(res.locals.uid, ['username', 'userslug']); const payload = res.locals.userData;
const { username, userslug } = payload;
const [states, allCategoriesData] = await Promise.all([ const [states, allCategoriesData] = await Promise.all([
user.getCategoryWatchState(res.locals.uid), user.getCategoryWatchState(res.locals.uid),
categories.buildForSelect(res.locals.uid, 'find', ['descriptionParsed', 'depth', 'slug']), categories.buildForSelect(res.locals.uid, 'find', ['descriptionParsed', 'depth', 'slug']),
@@ -31,7 +32,6 @@ categoriesController.get = async function (req, res) {
} }
}); });
const payload = {};
payload.categories = categoriesData; payload.categories = categoriesData;
payload.title = `[[pages:account/watched-categories, ${username}]]`; payload.title = `[[pages:account/watched-categories, ${username}]]`;
payload.breadcrumbs = helpers.buildBreadcrumbs([ payload.breadcrumbs = helpers.buildBreadcrumbs([

View File

@@ -2,7 +2,6 @@
const db = require('../../database'); const db = require('../../database');
const meta = require('../../meta'); const meta = require('../../meta');
const user = require('../../user');
const helpers = require('../helpers'); const helpers = require('../helpers');
const consentController = module.exports; const consentController = module.exports;
@@ -11,11 +10,10 @@ consentController.get = async function (req, res, next) {
if (!meta.config.gdpr_enabled) { if (!meta.config.gdpr_enabled) {
return next(); return next();
} }
const payload = res.locals.userData;
const { username, userslug } = await user.getUserFields(res.locals.uid, ['username', 'userslug']); const { username, userslug } = payload;
const consented = await db.getObjectField(`user:${res.locals.uid}`, 'gdpr_consent'); const consented = await db.getObjectField(`user:${res.locals.uid}`, 'gdpr_consent');
const payload = {};
payload.gdpr_consent = parseInt(consented, 10) === 1; payload.gdpr_consent = parseInt(consented, 10) === 1;
payload.digest = { payload.digest = {
frequency: meta.config.dailyDigestFreq || 'off', frequency: meta.config.dailyDigestFreq || 'off',

View File

@@ -15,18 +15,16 @@ followController.getFollowers = async function (req, res, next) {
}; };
async function getFollow(tpl, name, req, res) { async function getFollow(tpl, name, req, res) {
const { userData: payload } = res.locals;
const { const {
username, userslug, followerCount, followingCount, username, userslug, followerCount, followingCount,
} = await user.getUserFields(res.locals.uid, [ } = payload;
'username', 'userslug', 'followerCount', 'followingCount',
]);
const page = parseInt(req.query.page, 10) || 1; const page = parseInt(req.query.page, 10) || 1;
const resultsPerPage = 50; const resultsPerPage = 50;
const start = Math.max(0, page - 1) * resultsPerPage; const start = Math.max(0, page - 1) * resultsPerPage;
const stop = start + resultsPerPage - 1; const stop = start + resultsPerPage - 1;
const payload = {};
payload.title = `[[pages:${tpl}, ${username}]]`; payload.title = `[[pages:${tpl}, ${username}]]`;
const method = name === 'following' ? 'getFollowing' : 'getFollowers'; const method = name === 'following' ? 'getFollowing' : 'getFollowers';

View File

@@ -9,7 +9,7 @@ const groupsController = module.exports;
groupsController.get = async function (req, res) { groupsController.get = async function (req, res) {
const { username, userslug } = await user.getUserFields(res.locals.uid, ['username', 'userslug']); const { username, userslug } = await user.getUserFields(res.locals.uid, ['username', 'userslug']);
const payload = {}; const payload = res.locals.userData;
let groupsData = await groups.getUserGroups([res.locals.uid]); let groupsData = await groups.getUserGroups([res.locals.uid]);
groupsData = groupsData[0]; groupsData = groupsData[0];

View File

@@ -13,19 +13,17 @@ infoController.get = async function (req, res) {
const start = (page - 1) * itemsPerPage; const start = (page - 1) * itemsPerPage;
const stop = start + itemsPerPage - 1; const stop = start + itemsPerPage - 1;
const [{ username, userslug }, isPrivileged] = await Promise.all([ const payload = res.locals.userData;
user.getUserFields(res.locals.uid, ['username', 'userslug']), const { username, userslug } = payload;
const [isPrivileged, history, sessions, usernames, emails] = await Promise.all([
user.isPrivileged(req.uid), user.isPrivileged(req.uid),
]);
const [history, sessions, usernames, emails, notes] = await Promise.all([
user.getModerationHistory(res.locals.uid), user.getModerationHistory(res.locals.uid),
user.auth.getSessions(res.locals.uid, req.sessionID), user.auth.getSessions(res.locals.uid, req.sessionID),
user.getHistory(`user:${res.locals.uid}:usernames`), user.getHistory(`user:${res.locals.uid}:usernames`),
user.getHistory(`user:${res.locals.uid}:emails`), user.getHistory(`user:${res.locals.uid}:emails`),
getNotes({ uid: res.locals.uid, isPrivileged }, start, stop),
]); ]);
const payload = {}; const notes = await getNotes({ uid: res.locals.uid, isPrivileged }, start, stop);
payload.history = history; payload.history = history;
payload.sessions = sessions; payload.sessions = sessions;

View File

@@ -177,10 +177,9 @@ async function getPostsFromUserSet(template, req, res) {
const data = templateToData[template]; const data = templateToData[template];
const page = Math.max(1, parseInt(req.query.page, 10) || 1); const page = Math.max(1, parseInt(req.query.page, 10) || 1);
const [{ username, userslug }, settings] = await Promise.all([ const payload = res.locals.userData;
user.getUserFields(res.locals.uid, ['username', 'userslug']), const { username, userslug } = payload;
user.getSettings(req.uid), const settings = await user.getSettings(req.uid);
]);
const itemsPerPage = data.type === 'topics' ? settings.topicsPerPage : settings.postsPerPage; const itemsPerPage = data.type === 'topics' ? settings.topicsPerPage : settings.postsPerPage;
const start = (page - 1) * itemsPerPage; const start = (page - 1) * itemsPerPage;
@@ -207,7 +206,6 @@ async function getPostsFromUserSet(template, req, res) {
} }
const { itemCount, itemData } = result; const { itemCount, itemData } = result;
const payload = {};
payload[data.type] = itemData[data.type]; payload[data.type] = itemData[data.type];
payload.nextStart = itemData.nextStart; payload.nextStart = itemData.nextStart;

View File

@@ -6,13 +6,15 @@ const helpers = require('../helpers');
const sessionController = module.exports; const sessionController = module.exports;
sessionController.get = async function (req, res) { sessionController.get = async function (req, res) {
const { username, userslug } = await user.getUserFields(res.locals.uid, ['username', 'userslug']); const payload = res.locals.userData;
const { username, userslug } = payload;
const payload = { payload.sessions = await user.auth.getSessions(res.locals.uid, req.sessionID);
sessions: await user.auth.getSessions(res.locals.uid, req.sessionID), payload.title = '[[pages:account/sessions]]';
title: '[[pages:account/sessions]]', payload.breadcrumbs = helpers.buildBreadcrumbs([
breadcrumbs: helpers.buildBreadcrumbs([{ text: username, url: `/user/${userslug}` }, { text: '[[pages:account/sessions]]' }]), { text: username, url: `/user/${userslug}` },
}; { text: '[[pages:account/sessions]]' },
]);
res.render('account/sessions', payload); res.render('account/sessions', payload);
}; };

View File

@@ -1,7 +1,6 @@
'use strict'; 'use strict';
const db = require('../../database'); const db = require('../../database');
const user = require('../../user');
const helpers = require('../helpers'); const helpers = require('../helpers');
const tagsController = module.exports; const tagsController = module.exports;
@@ -10,10 +9,10 @@ tagsController.get = async function (req, res) {
if (req.uid !== res.locals.uid) { if (req.uid !== res.locals.uid) {
return helpers.notAllowed(req, res); return helpers.notAllowed(req, res);
} }
const { username, userslug } = await user.getUserFields(res.locals.uid, ['username', 'userslug']); const payload = res.locals.userData;
const { username, userslug } = payload;
const tagData = await db.getSortedSetRange(`uid:${res.locals.uid}:followed_tags`, 0, -1); const tagData = await db.getSortedSetRange(`uid:${res.locals.uid}:followed_tags`, 0, -1);
const payload = {};
payload.tags = tagData; payload.tags = tagData;
payload.title = `[[pages:account/watched-tags, ${username}]]`; payload.title = `[[pages:account/watched-tags, ${username}]]`;
payload.breadcrumbs = helpers.buildBreadcrumbs([ payload.breadcrumbs = helpers.buildBreadcrumbs([

View File

@@ -6,14 +6,14 @@ const nconf = require('nconf');
const db = require('../../database'); const db = require('../../database');
const helpers = require('../helpers'); const helpers = require('../helpers');
const user = require('../../user');
const meta = require('../../meta'); const meta = require('../../meta');
const pagination = require('../../pagination'); const pagination = require('../../pagination');
const uploadsController = module.exports; const uploadsController = module.exports;
uploadsController.get = async function (req, res) { uploadsController.get = async function (req, res) {
const { username, userslug } = await user.getUserFields(res.locals.uid, ['username', 'userslug']); const payload = res.locals.userData;
const { username, userslug } = payload;
const page = Math.max(1, parseInt(req.query.page, 10) || 1); const page = Math.max(1, parseInt(req.query.page, 10) || 1);
const itemsPerPage = 25; const itemsPerPage = 25;
const start = (page - 1) * itemsPerPage; const start = (page - 1) * itemsPerPage;
@@ -23,7 +23,6 @@ uploadsController.get = async function (req, res) {
db.getSortedSetRevRange(`uid:${res.locals.uid}:uploads`, start, stop), db.getSortedSetRevRange(`uid:${res.locals.uid}:uploads`, start, stop),
]); ]);
const payload = {};
payload.uploads = uploadNames.map(uploadName => ({ payload.uploads = uploadNames.map(uploadName => ({
name: uploadName, name: uploadName,
url: path.resolve(nconf.get('upload_url'), uploadName), url: path.resolve(nconf.get('upload_url'), uploadName),