你是否还在为反复翻译相同内容浪费时间而烦恼?在阅读英文文档或浏览国际网站时,重复出现的专业术语、固定短语总是触发重复翻译请求,既消耗接口额度又拖慢浏览节奏。今天我们将深入解析kiss-translator的翻译记忆功能,通过src/apis/history.js与src/libs/cache.js的技术实现,教你如何利用本地缓存机制让翻译效率倍增。
翻译记忆的工作原理
翻译记忆(Translation Memory)是kiss-translator的核心优化模块,通过两种层级的缓存机制实现重复内容的智能处理:
-
会话级缓存:通过src/apis/history.js中的
historyMap对象维护当前会话的翻译记录,默认保留最近的DEFAULT_CONTEXT_SIZE条翻译结果(常量定义在src/config/中)。当用户在同一页面重复选择相同文本时,系统会直接从内存中调取结果,响应速度提升至毫秒级。 -
持久化缓存:利用浏览器的Cache API实现跨会话的翻译结果存储。通过
putHttpCache方法将GET请求的响应结果保存到名为CACHE_NAME的缓存空间,有效期由DEFAULT_CACHE_TIMEOUT控制(可在src/config/setting.js中配置,默认值为DEFAULT_HTTP_TIMEOUT)。
核心实现代码解析
会话记忆管理
src/apis/history.js采用ES6 Map数据结构实现高效的键值对存储:
const historyMap = new Map();
const MsgHistory = (maxSize = DEFAULT_CONTEXT_SIZE) => {
const messages = [];
const add = (...msgs) => {
messages.push(...msgs.filter(Boolean));
const extra = messages.length - maxSize;
if (extra > 0) {
messages.splice(0, extra); // 保持队列长度不超过maxSize
}
};
// 省略getAll和clear方法...
return { add, getAll, clear };
};
这种实现确保了:
- O(1)时间复杂度的读写操作
- 自动维护固定大小的缓存队列
- 支持多API实例的独立缓存(通过apiSlug区分)
HTTP缓存处理
src/libs/cache.js实现了完整的缓存生命周期管理:
export const putHttpCache = async ({
input,
init,
data,
maxAge = DEFAULT_CACHE_TIMEOUT
}) => {
try {
const req = await newCacheReq(input, init); // 处理GET/POST请求差异
const cache = await caches.open(CACHE_NAME);
const res = new Response(JSON.stringify(data), {
status: 200,
headers: {
"Content-Type": "application/json",
"Cache-Control": `max-age=${maxAge}`
}
});
await cache.put(req, res);
} catch (err) {
kissLog("put cache", err); // 错误处理见[src/libs/log.js](https://link.gitcode.com/i/eced750f6d8c988368997e0f0f52f213)
}
};
特别针对POST请求做了特殊处理,通过将请求体追加到URL路径的方式实现可缓存性,这是src/libs/cache.js中的关键优化:
if (request.method !== "GET") {
const body = await request.text();
const cacheUrl = new URL(request.url);
cacheUrl.pathname += body; // 将请求体作为URL的一部分
request = new Request(cacheUrl.toString(), { method: "GET" });
}
实际应用效果与配置建议
性能提升数据
在典型使用场景下,翻译记忆功能可带来显著的性能优化:
| 操作类型 | 无缓存 | 会话缓存 | 持久化缓存 |
|---|---|---|---|
| 首次翻译 | 300-800ms | - | - |
| 二次翻译 | - | 10-30ms | 50-100ms |
| 跨会话翻译 | - | - | 60-120ms |
数据基于默认配置,使用OPT_TRANS_MICROSOFT接口测试
自定义配置指南
用户可通过以下方式调整缓存行为:
-
修改缓存大小:编辑src/config/setting.js中的
TRANS_MIN_LENGTH和TRANS_MAX_LENGTH常量(第23-24行),控制单个翻译请求的文本长度限制。 -
调整超时设置:修改
httpTimeout参数(src/config/setting.js#L154)控制缓存的有效期,建议根据使用习惯设置为3600-86400秒。 -
手动清除缓存:调用src/libs/cache.js中的
tryClearCaches方法,或通过设置页面的"清除缓存"选项(对应src/views/Options/Setting.js中的UI控件)。
高级应用场景
多API协同缓存
通过src/apis/trans.js的调度机制,翻译记忆功能可协同多个翻译接口工作。例如,当主接口(如OPT_TRANS_MICROSOFT)请求失败时,系统会自动尝试备用接口,并将成功结果写入统一缓存,确保后续请求的一致性。
字幕翻译优化
在字幕翻译模块中,缓存机制被用于处理视频播放时的重复字幕内容。通过src/subtitle/BilingualSubtitleManager.js与缓存系统的联动,实现了双语字幕的快速切换和记忆,特别适合课程视频等有大量重复术语的场景。
总结与展望
翻译记忆功能通过分层缓存策略,有效解决了重复内容翻译的效率问题,同时通过src/libs/cache.js的兼容性设计,确保了在扩展模式(src/background.js)和脚本模式(src/userscript.js)下的一致表现。
未来版本计划增强以下功能:
- 基于用户习惯的智能缓存优先级
- 跨设备的缓存同步(通过DEFAULT_SYNC模块)
- 缓存空间自动管理,防止过度占用存储
要体验这一功能,可直接安装最新版本的kiss-translator,或通过开发文档了解更多技术细节。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考




