mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2024-11-21 09:36:35 +00:00
feat: 优化接口转换速度 避免频繁读写
This commit is contained in:
parent
c54a58d6e4
commit
6fa50c58d3
@ -89,7 +89,36 @@ export function CacheClassFuncAsync(ttl: number = 3600 * 1000, customKey: string
|
|||||||
}
|
}
|
||||||
return logExecutionTime;
|
return logExecutionTime;
|
||||||
}
|
}
|
||||||
|
export function CacheClassFuncAsyncExtend(ttl: number = 3600 * 1000, customKey: string = '', checker: any = (_data: any) => { return true; }) {
|
||||||
|
//console.log('CacheClassFuncAsync', ttl, customKey);
|
||||||
|
function logExecutionTime(target: any, methodName: string, descriptor: PropertyDescriptor) {
|
||||||
|
//console.log('logExecutionTime', target, methodName, descriptor);
|
||||||
|
const cache = new Map<string, { expiry: number; value: any }>();
|
||||||
|
const originalMethod = descriptor.value;
|
||||||
|
descriptor.value = async function (...args: any[]) {
|
||||||
|
const key = `${customKey}${String(methodName)}.(${args.map(arg => JSON.stringify(arg)).join(', ')})`;
|
||||||
|
cache.forEach((value, key) => {
|
||||||
|
if (value.expiry < Date.now()) {
|
||||||
|
cache.delete(key);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const cachedValue = cache.get(key);
|
||||||
|
if (cachedValue && cachedValue.expiry > Date.now()) {
|
||||||
|
return cachedValue.value;
|
||||||
|
}
|
||||||
|
// const start = Date.now();
|
||||||
|
const result = await originalMethod.apply(this, args);
|
||||||
|
if (!checker(result)) {
|
||||||
|
return result;//丢弃缓存
|
||||||
|
}
|
||||||
|
// const end = Date.now();
|
||||||
|
// console.log(`Method ${methodName} executed in ${end - start} ms.`);
|
||||||
|
cache.set(key, { expiry: Date.now() + ttl, value: result });
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return logExecutionTime;
|
||||||
|
}
|
||||||
// export function CacheClassFuncAsync(ttl: number = 3600 * 1000, customKey: string = ''): any {
|
// export function CacheClassFuncAsync(ttl: number = 3600 * 1000, customKey: string = ''): any {
|
||||||
// const cache = new Map<string, { expiry: number; value: any }>();
|
// const cache = new Map<string, { expiry: number; value: any }>();
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { ModifyProfileParams, SelfInfo, User, UserDetailInfoByUin } from '@/core/entities';
|
import { ModifyProfileParams, SelfInfo, User, UserDetailInfoByUin } from '@/core/entities';
|
||||||
import { friends, selfInfo } from '@/core/data';
|
import { friends, selfInfo } from '@/core/data';
|
||||||
import { CacheClassFuncAsync } from '@/common/utils/helper';
|
import { CacheClassFuncAsync, CacheClassFuncAsyncExtend } from '@/common/utils/helper';
|
||||||
import { GeneralCallResult, napCatCore, NTQQFriendApi } from '@/core';
|
import { GeneralCallResult, napCatCore, NTQQFriendApi } from '@/core';
|
||||||
import { ProfileListener } from '@/core/listeners';
|
import { ProfileListener } from '@/core/listeners';
|
||||||
import { rejects } from 'assert';
|
import { rejects } from 'assert';
|
||||||
@ -163,6 +163,7 @@ export class NTQQUserApi {
|
|||||||
}
|
}
|
||||||
return skey;
|
return skey;
|
||||||
}
|
}
|
||||||
|
@CacheClassFuncAsyncExtend(3600, 'Uin2Uid', (data: string | undefined) => { if (data && data.indexOf('u_') != -1) { return true } return false; })
|
||||||
static async getUidByUin(Uin: string) {
|
static async getUidByUin(Uin: string) {
|
||||||
let ret = await NTEventDispatch.CallNoListenerEvent
|
let ret = await NTEventDispatch.CallNoListenerEvent
|
||||||
<(Uin: string[]) => Promise<{ uidInfo: Map<string, string> }>>(
|
<(Uin: string[]) => Promise<{ uidInfo: Map<string, string> }>>(
|
||||||
@ -195,6 +196,7 @@ export class NTQQUserApi {
|
|||||||
}
|
}
|
||||||
return uid;
|
return uid;
|
||||||
}
|
}
|
||||||
|
@CacheClassFuncAsyncExtend(3600, 'Uid2Uin', (data: number | undefined) => { if (data && data != 0 && !isNaN(data)) { return true } return false; })
|
||||||
static async getUinByUid(Uid: string | undefined) {
|
static async getUinByUid(Uid: string | undefined) {
|
||||||
if (!Uid) {
|
if (!Uid) {
|
||||||
return '';
|
return '';
|
||||||
@ -217,7 +219,7 @@ export class NTQQUserApi {
|
|||||||
if (!uin) {
|
if (!uin) {
|
||||||
uin = (await NTQQUserApi.getUserDetailInfo(Uid)).uin; //从QQ Native 转换
|
uin = (await NTQQUserApi.getUserDetailInfo(Uid)).uin; //从QQ Native 转换
|
||||||
}
|
}
|
||||||
|
|
||||||
// if (!uin) {
|
// if (!uin) {
|
||||||
// uin = (await NTQQFriendApi.getFriends(false)).find((t) => { t.uid == Uid })?.uin; //从QQ Native 缓存转换
|
// uin = (await NTQQFriendApi.getFriends(false)).find((t) => { t.uid == Uid })?.uin; //从QQ Native 缓存转换
|
||||||
// }
|
// }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user