mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-17 09:36:08 +08:00
core: 性能优化
This commit is contained in:
1 parent
34465ba80a
commit
ee4dc90cf3
6 files changed
+9
-41
No files matched your search
@@ -12,6 +12,7 @@ dist/
|
||||
.coverage
|
||||
globalConfig.json
|
||||
*.out
|
||||
.clinic/
|
||||
|
||||
# Config Files
|
||||
/config.yaml
|
||||
|
||||
@@ -25,7 +25,6 @@
|
||||
"koa-router": "^10.0.0",
|
||||
"koa-static-cache": "^5.1.3",
|
||||
"lodash": "^4.17.21",
|
||||
"lru-cache": "^6.0.0",
|
||||
"minio": "7.0.17",
|
||||
"moment-timezone": "^0.5.32",
|
||||
"mongodb": "^3.6.5",
|
||||
@@ -36,7 +35,6 @@
|
||||
"sockjs": "^0.3.20",
|
||||
"superagent": "^6.1.0",
|
||||
"systeminformation": "5.6.8",
|
||||
"wtfnode": "^0.8.4",
|
||||
"yargs": "^16.2.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
@@ -48,14 +46,12 @@
|
||||
"@types/koa-router": "^7.4.1",
|
||||
"@types/koa-static-cache": "^5.1.0",
|
||||
"@types/lodash": "^4.14.168",
|
||||
"@types/lru-cache": "^5.1.0",
|
||||
"@types/minio": "^7.0.7",
|
||||
"@types/mongodb": "^3.6.10",
|
||||
"@types/nodemailer": "^6.4.1",
|
||||
"@types/serialize-javascript": "^5.0.0",
|
||||
"@types/sockjs": "^0.3.32",
|
||||
"@types/superagent": "^4.1.8",
|
||||
"@types/wtfnode": "^0.7.0",
|
||||
"@types/yargs": "^16.0.0",
|
||||
"formidable": "^1.2.2"
|
||||
},
|
||||
|
||||
@@ -41,7 +41,6 @@ import path from 'path';
|
||||
import cluster from 'cluster';
|
||||
import fs from 'fs-extra';
|
||||
import { argv } from 'yargs';
|
||||
import wtfnode from 'wtfnode';
|
||||
import './utils';
|
||||
import { Logger } from './logger';
|
||||
import './ui';
|
||||
@@ -50,14 +49,6 @@ import * as bus from './service/bus';
|
||||
export * from './interface';
|
||||
const logger = new Logger('loader');
|
||||
logger.debug('%o', argv);
|
||||
bus.on('app/exit', () => {
|
||||
if (argv.debug) {
|
||||
wtfnode.setLogger('info', logger.info.bind(logger));
|
||||
wtfnode.setLogger('warn', logger.warn.bind(logger));
|
||||
wtfnode.setLogger('error', logger.error.bind(logger));
|
||||
wtfnode.dump();
|
||||
}
|
||||
});
|
||||
|
||||
async function fork(args: string[] = []) {
|
||||
const _args = process.argv.slice(2);
|
||||
@@ -100,8 +91,12 @@ async function stopWorker() {
|
||||
}
|
||||
|
||||
async function startWorker(cnt: number, createFirst = true) {
|
||||
if (argv.single) {
|
||||
await entry({ entry: 'worker' });
|
||||
} else {
|
||||
await fork(createFirst ? ['--firstWorker'] : undefined);
|
||||
for (let i = 1; i < cnt; i++) await fork();
|
||||
}
|
||||
}
|
||||
|
||||
async function reload(count = 1) {
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import Lru from 'lru-cache';
|
||||
import { Collection } from 'mongodb';
|
||||
import db from '../service/db';
|
||||
|
||||
@@ -8,21 +7,15 @@ interface OauthMap {
|
||||
}
|
||||
|
||||
const coll: Collection<OauthMap> = db.collection('oauth');
|
||||
const cache = new Lru({
|
||||
maxAge: 5000,
|
||||
});
|
||||
|
||||
class OauthModel {
|
||||
static async get(_id: string) {
|
||||
const res = cache.get(_id);
|
||||
if (res !== undefined) return res;
|
||||
const doc = await coll.findOne({ _id });
|
||||
if (doc) return doc.uid;
|
||||
return null;
|
||||
}
|
||||
|
||||
static async set(_id: string, value: number) {
|
||||
cache.set(_id, value);
|
||||
const res = await coll.findOneAndUpdate(
|
||||
{ _id },
|
||||
{ $set: { value } },
|
||||
|
||||
@@ -18,8 +18,9 @@ import sockjs from 'sockjs';
|
||||
import type { SetOption } from 'cookies';
|
||||
import serialize, { SerializeJSOptions } from 'serialize-javascript';
|
||||
import { argv } from 'yargs';
|
||||
import { createHash } from 'crypto';
|
||||
import * as bus from './bus';
|
||||
import { errorMessage, lrucache } from '../utils';
|
||||
import { errorMessage } from '../utils';
|
||||
import { User, DomainDoc } from '../interface';
|
||||
import { Logger } from '../logger';
|
||||
import {
|
||||
@@ -422,10 +423,9 @@ export class Handler extends HandlerCommon {
|
||||
if (xff) this.request.ip = this.request.headers[xff.toLowerCase()] || this.request.ip;
|
||||
}
|
||||
|
||||
@lrucache
|
||||
// eslint-disable-next-line class-methods-use-this
|
||||
getCsrfToken(id: string) {
|
||||
return hash('csrf_token', id);
|
||||
return createHash('md5').update(`csrf_token${id}`).digest('hex');
|
||||
}
|
||||
|
||||
async render(name: string, context: any) {
|
||||
@@ -457,10 +457,10 @@ export class Handler extends HandlerCommon {
|
||||
}
|
||||
|
||||
async init({ domainId }) {
|
||||
if (!argv.benchmark) await this.limitRate('global', 10, 50);
|
||||
const [absoluteDomain, inferDomain] = await Promise.all([
|
||||
domain.get(domainId),
|
||||
domain.getByHost(this.request.host),
|
||||
this.limitRate('global', 10, 50),
|
||||
this.getSession(),
|
||||
this.getBdoc(),
|
||||
]);
|
||||
|
||||
@@ -2,8 +2,6 @@ import fs from 'fs';
|
||||
import { Duplex } from 'stream';
|
||||
import cluster from 'cluster';
|
||||
import path, { sep } from 'path';
|
||||
import serialize from 'serialize-javascript';
|
||||
import Lru from 'lru-cache';
|
||||
import { ObjectID } from 'mongodb';
|
||||
import { isMoment } from 'moment';
|
||||
import type { Moment } from 'moment-timezone';
|
||||
@@ -29,21 +27,6 @@ declare global {
|
||||
}
|
||||
}
|
||||
|
||||
const lru = new Lru(1000);
|
||||
|
||||
export function lrucache(target: any, funcName: string, obj: any) {
|
||||
const originalMethod = obj.value;
|
||||
obj.value = function func(...args: any[]) {
|
||||
const key = serialize({ funcName, args });
|
||||
let val = lru.get(key);
|
||||
if (val) return val;
|
||||
val = originalMethod.call(this, ...args);
|
||||
lru.set(key, val);
|
||||
return val;
|
||||
};
|
||||
return obj;
|
||||
}
|
||||
|
||||
if (!cluster.worker) {
|
||||
// @ts-ignore
|
||||
cluster.worker = { id: 0 };
|
||||
|
||||
Reference in new issue
Block a user