mirror of
				https://github.com/NodeBB/NodeBB.git
				synced 2025-10-31 19:15:58 +01:00 
			
		
		
		
	perf: get rid of more calls, fix other profile pages #12632
This commit is contained in:
		| @@ -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, | ||||||
|   | |||||||
| @@ -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([ | ||||||
|   | |||||||
| @@ -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', | ||||||
|   | |||||||
| @@ -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'; | ||||||
|   | |||||||
| @@ -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]; | ||||||
|   | |||||||
| @@ -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; | ||||||
|   | |||||||
| @@ -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; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -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); | ||||||
| }; | }; | ||||||
|   | |||||||
| @@ -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([ | ||||||
|   | |||||||
| @@ -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), | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user