mirror of
				https://github.com/NodeBB/NodeBB.git
				synced 2025-10-30 18:46:01 +01:00 
			
		
		
		
	fix: #8884, remove header/footer cache
This commit is contained in:
		| @@ -9,7 +9,6 @@ cacheController.get = function (req, res) { | ||||
| 	const groupCache = require('../../groups').cache; | ||||
| 	const objectCache = require('../../database').objectCache; | ||||
| 	const localCache = require('../../cache'); | ||||
| 	const headerFooterCache = require('../../middleware').headerFooterCache; | ||||
|  | ||||
| 	function getInfo(cache) { | ||||
| 		return { | ||||
| @@ -28,7 +27,6 @@ cacheController.get = function (req, res) { | ||||
| 		postCache: getInfo(postCache), | ||||
| 		groupCache: getInfo(groupCache), | ||||
| 		localCache: getInfo(localCache), | ||||
| 		headerFooterCache: getInfo(headerFooterCache), | ||||
| 	}; | ||||
|  | ||||
| 	if (objectCache) { | ||||
| @@ -44,7 +42,6 @@ cacheController.dump = function (req, res, next) { | ||||
| 		object: require('../../database').objectCache, | ||||
| 		group: require('../../groups').cache, | ||||
| 		local: require('../../cache'), | ||||
| 		headerfooter: require('../../middleware').headerFooterCache, | ||||
| 	}; | ||||
| 	if (!caches[req.query.name]) { | ||||
| 		return next(); | ||||
|   | ||||
| @@ -10,19 +10,10 @@ const translator = require('../translator'); | ||||
| const widgets = require('../widgets'); | ||||
| const utils = require('../utils'); | ||||
| const slugify = require('../slugify'); | ||||
| const cacheCreate = require('../cacheCreate'); | ||||
| const cache = cacheCreate({ | ||||
| 	name: 'header-footer', | ||||
| 	max: 1000, | ||||
| 	maxAge: 0, | ||||
| 	enabled: global.env === 'production', | ||||
| }); | ||||
|  | ||||
| const relative_path = nconf.get('relative_path'); | ||||
|  | ||||
| module.exports = function (middleware) { | ||||
| 	middleware.headerFooterCache = cache; | ||||
|  | ||||
| 	middleware.processRender = function processRender(req, res, next) { | ||||
| 		// res.render post-processing, modified from here: https://gist.github.com/mrlannigan/5051687 | ||||
| 		const render = res.render; | ||||
| @@ -104,34 +95,14 @@ module.exports = function (middleware) { | ||||
|  | ||||
| 	async function renderHeaderFooter(method, req, res, options) { | ||||
| 		let str = ''; | ||||
| 		const lang = getLang(req, res); | ||||
| 		function getCacheKey() { | ||||
| 			return [lang, method] | ||||
| 				.concat(req.path.split('/').slice(0, 4)) | ||||
| 				.join('/'); | ||||
| 		if (res.locals.renderHeader) { | ||||
| 			str = await middleware[method](req, res, options); | ||||
| 		} else if (res.locals.renderAdminHeader) { | ||||
| 			str = await middleware.admin[method](req, res, options); | ||||
| 		} else { | ||||
| 			str = ''; | ||||
| 		} | ||||
| 		let cacheKey; | ||||
| 		if (req.uid === 0 && res.locals.renderHeader) { | ||||
| 			cacheKey = getCacheKey(); | ||||
| 			str = cache.get(cacheKey); | ||||
| 			if (str) { | ||||
| 				return str; | ||||
| 			} | ||||
| 		} | ||||
| 		if (!str) { | ||||
| 			if (res.locals.renderHeader) { | ||||
| 				str = await middleware[method](req, res, options); | ||||
| 			} else if (res.locals.renderAdminHeader) { | ||||
| 				str = await middleware.admin[method](req, res, options); | ||||
| 			} else { | ||||
| 				str = ''; | ||||
| 			} | ||||
| 		} | ||||
| 		const translated = await translate(str, lang); | ||||
| 		if (req.uid === 0 && res.locals.renderHeader) { | ||||
| 			cache.set(cacheKey, translated, 300000); | ||||
| 		} | ||||
| 		return translated; | ||||
| 		return await translate(str, getLang(req, res)); | ||||
| 	} | ||||
|  | ||||
| 	function getLang(req, res) { | ||||
|   | ||||
| @@ -11,8 +11,6 @@ SocketCache.clear = async function (socket, data) { | ||||
| 		require('../../groups').cache.reset(); | ||||
| 	} else if (data.name === 'local') { | ||||
| 		require('../../cache').reset(); | ||||
| 	} else if (data.name === 'headerfooter') { | ||||
| 		require('../../middleware').headerFooterCache.reset(); | ||||
| 	} | ||||
| }; | ||||
|  | ||||
| @@ -22,7 +20,6 @@ SocketCache.toggle = async function (socket, data) { | ||||
| 		object: require('../../database').objectCache, | ||||
| 		group: require('../../groups').cache, | ||||
| 		local: require('../../cache'), | ||||
| 		headerfooter: require('../../middleware').headerFooterCache, | ||||
| 	}; | ||||
| 	if (!caches[data.name]) { | ||||
| 		return; | ||||
|   | ||||
| @@ -2,7 +2,7 @@ | ||||
| <div class="row post-cache"> | ||||
| 	<div class="col-lg-12"> | ||||
| 		<div class="row"> | ||||
| 			<div class="col-lg-2"> | ||||
| 			<div class="col-lg-3"> | ||||
| 				<div class="panel panel-default"> | ||||
| 					<div class="panel-heading">[[admin/advanced/cache:post-cache]]</div> | ||||
| 					<div class="panel-body"> | ||||
| @@ -37,7 +37,7 @@ | ||||
| 			</div> | ||||
|  | ||||
| 			<!-- IF objectCache --> | ||||
| 			<div class="col-lg-2"> | ||||
| 			<div class="col-lg-3"> | ||||
| 				<div class="panel panel-default"> | ||||
| 					<div class="panel-heading">Object Cache</div> | ||||
| 					<div class="panel-body"> | ||||
| @@ -63,7 +63,7 @@ | ||||
| 			</div> | ||||
| 			<!-- ENDIF objectCache --> | ||||
|  | ||||
| 			<div class="col-lg-2"> | ||||
| 			<div class="col-lg-3"> | ||||
| 				<div class="panel panel-default"> | ||||
| 					<div class="panel-heading">Group Cache</div> | ||||
| 					<div class="panel-body"> | ||||
| @@ -89,7 +89,7 @@ | ||||
| 				</div> | ||||
| 			</div> | ||||
|  | ||||
| 			<div class="col-lg-2"> | ||||
| 			<div class="col-lg-3"> | ||||
| 				<div class="panel panel-default"> | ||||
| 					<div class="panel-heading">Local Cache</div> | ||||
| 					<div class="panel-body"> | ||||
| @@ -114,32 +114,6 @@ | ||||
| 					</div> | ||||
| 				</div> | ||||
| 			</div> | ||||
|  | ||||
| 			<div class="col-lg-2"> | ||||
| 				<div class="panel panel-default"> | ||||
| 					<div class="panel-heading">Header Footer Cache</div> | ||||
| 					<div class="panel-body"> | ||||
| 						<div class="checkbox" data-name="headerfooter"> | ||||
| 							<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect"> | ||||
| 								<input class="mdl-switch__input" type="checkbox" {{{if headerFooterCache.enabled}}}checked{{{end}}}> | ||||
| 							</label> | ||||
| 						</div> | ||||
| 						<span>{headerFooterCache.length} / {headerFooterCache.max}</span><br/> | ||||
|  | ||||
| 						<div class="progress"> | ||||
| 							<div class="progress-bar" role="progressbar" aria-valuenow="{headerFooterCache.percentFull}" aria-valuemin="0" aria-valuemax="100" style="width: {headerFooterCache.percentFull}%;"> | ||||
| 								[[admin/advanced/cache:percent-full, {headerFooterCache.percentFull}]] | ||||
| 							</div> | ||||
| 						</div> | ||||
|  | ||||
| 						<label>Hits:</label> <span>{headerFooterCache.hits}</span><br/> | ||||
| 						<label>Misses:</label> <span>{headerFooterCache.misses}</span><br/> | ||||
| 						<label>Hit Ratio:</label> <span>{headerFooterCache.hitRatio}</span><br/> | ||||
| 						<a href="{config.relative_path}/api/admin/advanced/cache/dump?name=headerfooter" class="btn btn-sm btn-default"><i class="fa fa-download"></i></a> | ||||
| 						<a class="btn btn-sm btn-danger clear" data-name="headerfooter"><i class="fa fa-trash"></i></a> | ||||
| 					</div> | ||||
| 				</div> | ||||
| 			</div> | ||||
| 		</div> | ||||
| 	</div> | ||||
| </div> | ||||
|   | ||||
| @@ -173,7 +173,6 @@ async function setupMockDefaults() { | ||||
| 	require('../../src/groups').cache.reset(); | ||||
| 	require('../../src/posts/cache').reset(); | ||||
| 	require('../../src/cache').reset(); | ||||
| 	require('../../src/middleware').headerFooterCache.reset(); | ||||
|  | ||||
| 	winston.info('test_database flushed'); | ||||
| 	await setupDefaultConfigs(meta); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user