缓存系统
注意: @veaba/qrcode-js-shared 是内部私有包。缓存功能通过以下公开包自动提供:
@veaba/qrcode-js@veaba/qrcode-node@veaba/qrcode-bun
所有公开包都包含相同的缓存 API,无需单独安装内部包。
@veaba/qrcode-js-shared 提供 LRU (Least Recently Used) 缓存系统,用于优化重复 QRCode 的生成性能。
核心概念
为什么需要缓存?
QRCode 生成涉及复杂的计算(Reed-Solomon 编码、模块布局等)。对于重复文本,缓存可以避免重复计算,性能提升 10-100 倍。
缓存键生成
缓存键由文本和纠错级别组合而成:
API 参考
getCachedQRCode
获取缓存的 QRCode,如果不存在则创建并缓存。
参数
返回值
QRCodeCore - QRCode 实例(来自缓存或新创建)
示例
clearQRCodeCache
清空 QRCode 缓存。
示例
getCacheStats
获取缓存统计信息。
返回值
示例
configureCache
配置缓存选项。
参数
示例
带缓存的样式函数
所有预设样式函数都有带 Cached 后缀的版本:
批量缓存生成
generateBatchQRCodesCached
示例
LRUCache 类
底层 LRU 缓存实现,可用于自定义缓存场景。
构造函数
方法
get
获取值,如果存在则移动到最近使用位置。
set
设置值,如果已满则淘汰最久未使用的。
clear
清空缓存。
属性
size
当前缓存条目数。
keys
所有缓存键。
示例
实现细节
LRU 算法
内存管理
- 缓存的
QRCodeCore实例会被 JavaScript 垃圾回收器管理 - 当缓存被淘汰且没有外部引用时,内存会被释放
- 建议根据实际场景调整
maxSize,避免内存占用过大
使用场景
场景 1:电商商品二维码
场景 2:活动门票批量生成
场景 3:动态调整缓存
性能对比
最佳实践
- 默认使用缓存:对于可能重复的文本,优先使用
getCachedQRCode - 合理设置容量:根据内存和访问模式调整
maxSize - 监控缓存状态:使用
getCacheStats了解缓存效果 - 适时清空:长时间运行后,可定期清空缓存释放内存