This commit is contained in:
2026-10-16 16:34:15 +08:00
parent 7a3769670b
commit ff366a4daf
80 changed files with 9961 additions and 888 deletions

42
main/lru-cache.js Normal file
View File

@@ -0,0 +1,42 @@
// P2-6(audit):通用 LRU 缓存 —— Map 迭代序即插入序,get/set 命中时
// delete+set 把键提到最新;set 超 maxSize 删最老(第一个键)。
//
// 用途:main/ai.js 的 pickOpenAITokenConfig / joinUrl 每次调用重复跑
// 正则 + new URL 解析;同 model / 同 baseURL 在一次会话里反复命中,
// 缓存结果省 CPU。maxSize 64 足够覆盖「用户试过的模型 + URL」组合,
// 不会无界增长。
'use strict';
/**
* @param {object} [opts]
* @param {number} [opts.maxSize=64]
* @returns {{ get: (k: any) => any, set: (k: any, v: any) => void,
* has: (k: any) => boolean, size: number }}
*/
function createLruCache({ maxSize = 64 } = {}) {
const map = new Map();
return {
get(key) {
if (!map.has(key)) return undefined;
const v = map.get(key);
// LRU:提到最新
map.delete(key);
map.set(key, v);
return v;
},
set(key, value) {
// 覆盖同键 = 使用一次,提到最新
if (map.has(key)) map.delete(key);
map.set(key, value);
if (map.size > maxSize) {
// Map 第一个键 = 最老
map.delete(map.keys().next().value);
}
},
has(key) { return map.has(key); },
get size() { return map.size; },
};
}
module.exports = { createLruCache };