From f22caf8c7b79183a3029660eee6d3e80ccc68d1d Mon Sep 17 00:00:00 2001 From: undefined Date: Sun, 31 Jul 2022 23:44:22 +0800 Subject: [PATCH] core: performance enhancement --- packages/hydrooj/package.json | 3 ++- packages/hydrooj/src/handler/manage.ts | 2 +- packages/hydrooj/src/model/setting.ts | 5 +++++ packages/hydrooj/src/model/system.ts | 2 +- packages/ui-default/handler.ts | 10 +++++----- packages/ui-default/package.json | 2 +- 6 files changed, 15 insertions(+), 9 deletions(-) diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index eded0742b..4d215df37 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "3.14.22", + "version": "3.14.23", "bin": "bin/hydrooj.js", "main": "src/loader", "module": "src/loader", @@ -45,6 +45,7 @@ "p-queue": "^7.2.0", "path-to-regexp": "^6.2.1", "require-resolve-hook": "^1.1.0", + "schemastery": "^3.5.0", "semver": "^7.3.7", "serialize-javascript": "^6.0.0", "source-map-support": "^0.5.21", diff --git a/packages/hydrooj/src/handler/manage.ts b/packages/hydrooj/src/handler/manage.ts index fc3df258d..54338b258 100644 --- a/packages/hydrooj/src/handler/manage.ts +++ b/packages/hydrooj/src/handler/manage.ts @@ -217,8 +217,8 @@ class SystemSettingHandler extends SystemHandler { } } } - tasks.push(bus.parallel('system/setting', args)); await Promise.all(tasks); + await bus.broadcast('system/setting', args); this.back(); } } diff --git a/packages/hydrooj/src/model/setting.ts b/packages/hydrooj/src/model/setting.ts index 10bec308f..d34382508 100644 --- a/packages/hydrooj/src/model/setting.ts +++ b/packages/hydrooj/src/model/setting.ts @@ -70,6 +70,7 @@ export const Setting = ( export const PreferenceSetting = (...settings: _Setting[]) => { for (const setting of settings) { + if (PREFERENCE_SETTINGS.find((s) => s.key === setting.key)) throw new Error(`Duplicate setting key: ${setting.key}`); PREFERENCE_SETTINGS.push(setting); SETTINGS.push(setting); SETTINGS_BY_KEY[setting.key] = setting; @@ -77,6 +78,7 @@ export const PreferenceSetting = (...settings: _Setting[]) => { }; export const AccountSetting = (...settings: _Setting[]) => { for (const setting of settings) { + if (ACCOUNT_SETTINGS.find((s) => s.key === setting.key)) throw new Error(`Duplicate setting key: ${setting.key}`); ACCOUNT_SETTINGS.push(setting); SETTINGS.push(setting); SETTINGS_BY_KEY[setting.key] = setting; @@ -84,18 +86,21 @@ export const AccountSetting = (...settings: _Setting[]) => { }; export const DomainUserSetting = (...settings: _Setting[]) => { for (const setting of settings) { + if (DOMAIN_USER_SETTINGS.find((s) => s.key === setting.key)) throw new Error(`Duplicate setting key: ${setting.key}`); DOMAIN_USER_SETTINGS.push(setting); DOMAIN_USER_SETTINGS_BY_KEY[setting.key] = setting; } }; export const DomainSetting = (...settings: _Setting[]) => { for (const setting of settings) { + if (DOMAIN_SETTINGS.find((s) => s.key === setting.key)) throw new Error(`Duplicate setting key: ${setting.key}`); DOMAIN_SETTINGS.push(setting); DOMAIN_SETTINGS_BY_KEY[setting.key] = setting; } }; export const SystemSetting = (...settings: _Setting[]) => { for (const setting of settings) { + if (SYSTEM_SETTINGS.find((s) => s.key === setting.key)) throw new Error(`Duplicate setting key: ${setting.key}`); SYSTEM_SETTINGS.push(setting); SYSTEM_SETTINGS_BY_KEY[setting.key] = setting; } diff --git a/packages/hydrooj/src/model/system.ts b/packages/hydrooj/src/model/system.ts index 70a8b8181..89b7098a3 100644 --- a/packages/hydrooj/src/model/system.ts +++ b/packages/hydrooj/src/model/system.ts @@ -69,7 +69,7 @@ export async function runConfig() { } bus.on('system/setting', (args) => { - for (const key in args) set(key, args[key], false); + for (const key in args) cache[key] = args[key]; }); global.Hydro.model.system = { diff --git a/packages/ui-default/handler.ts b/packages/ui-default/handler.ts index eb8330351..26d0d0381 100644 --- a/packages/ui-default/handler.ts +++ b/packages/ui-default/handler.ts @@ -36,7 +36,7 @@ declare module 'hydrooj/src/service/layers/base' { let constant = ''; let hash = ''; -async function run() { +async function buildUI() { const pageFiles = Object.keys(global.Hydro.ui.manifest).filter((i) => /\.page\.[jt]sx?$/.test(i)); const build = await esbuild.build({ format: 'iife', @@ -61,13 +61,13 @@ async function run() { const version = c.digest('hex'); constant = JSON.stringify(payload); UiContextBase.constantVersion = hash = version; - +} +bus.on('app/started', buildUI); +bus.on('system/setting', () => { [UiContextBase.nav_logo_dark, UiContextBase.nav_logo_dark_2x] = system.getMany([ 'ui-default.nav_logo_dark', 'ui-default.nav_logo_dark_2x', ]); -} -bus.on('app/started', run); -bus.on('system/setting', run); +}); class WikiHelpHandler extends Handler { noCheckPermView = true; diff --git a/packages/ui-default/package.json b/packages/ui-default/package.json index 96cbfacbf..f47dd7b4e 100644 --- a/packages/ui-default/package.json +++ b/packages/ui-default/package.json @@ -1,6 +1,6 @@ { "name": "@hydrooj/ui-default", - "version": "4.38.27", + "version": "4.38.28", "author": "undefined ", "license": "AGPL-3.0", "main": "hydro.js",