refactor: use local cache for plugin isActive check

This commit is contained in:
Barış Soner Uşaklı
2026-01-21 18:39:45 -05:00
parent 3f50d52a4e
commit 7ac5446a13

View File

@@ -14,6 +14,7 @@ const meta = require('../meta');
const pubsub = require('../pubsub'); const pubsub = require('../pubsub');
const { paths, pluginNamePattern } = require('../constants'); const { paths, pluginNamePattern } = require('../constants');
const pkgInstall = require('../cli/package-install'); const pkgInstall = require('../cli/package-install');
const cache = require('../cache');
const packageManager = pkgInstall.getPackageManager(); const packageManager = pkgInstall.getPackageManager();
let packageManagerExecutable = packageManager; let packageManagerExecutable = packageManager;
@@ -70,6 +71,7 @@ module.exports = function (Plugins) {
const count = await db.sortedSetCard('plugins:active'); const count = await db.sortedSetCard('plugins:active');
await db.sortedSetAdd('plugins:active', count, id); await db.sortedSetAdd('plugins:active', count, id);
} }
cache.set(`plugin:isActive:${id}`, !isActive);
meta.reloadRequired = true; meta.reloadRequired = true;
const hook = isActive ? 'deactivate' : 'activate'; const hook = isActive ? 'deactivate' : 'activate';
Plugins.hooks.fire(`action:plugin.${hook}`, { id: id }); Plugins.hooks.fire(`action:plugin.${hook}`, { id: id });
@@ -170,16 +172,20 @@ module.exports = function (Plugins) {
if (nconf.get('plugins:active')) { if (nconf.get('plugins:active')) {
return nconf.get('plugins:active').includes(id); return nconf.get('plugins:active').includes(id);
} }
return await db.isSortedSetMember('plugins:active', id); const cached = cache.get(`plugin:isActive:${id}`);
if (cached !== undefined) {
return cached;
}
const isActive = await db.isSortedSetMember('plugins:active', id);
cache.set(`plugin:isActive:${id}`, isActive);
return isActive;
}; };
Plugins.getActive = async function () { Plugins.getActive = async function () {
if (nconf.get('plugins:active')) { if (nconf.get('plugins:active')) {
return nconf.get('plugins:active'); return nconf.get('plugins:active');
} }
const active = await db.getSortedSetRange('plugins:active', 0, -1); return await db.getSortedSetRange('plugins:active', 0, -1);
nconf.set('plugins:active', active);
return active;
}; };
Plugins.autocomplete = async (fragment) => { Plugins.autocomplete = async (fragment) => {