为什么需要缓存
公司微应用monorepo形式管理。 需要全量发布。
未来采用项目级细粒度发布,平台机进行扩容、版本管理。
存在问题
微应用数量膨胀,每次构建发布都会损耗很多时间。
为了避免重复耗时, 使用缓存复用构建结果。
什么是缓存
缓存是一种行之有效的提高系统性能的手段、
小到硬件CPU处理器,大到各类上层应用,都有缓存的身影。
比如CPU,有一级高速缓冲存储器、二级缓存提高性能。
比如客户端、CDN 、数据库、算法中空间还时间都大量使用到了缓存
作为前端,我们最熟悉的浏览器的 http 协议的缓存控制等。
又如基于内存缓存 的 redis。
缓存特征
- 最大空间:有限的空间不能缓存所有的内容
- 清空(淘汰)策略 :用来保持有限的空间使用
- 先进先出策略FIFO(First In,First Out)) 队列
- 最少使用策略(LFU)按照访问的次数排序,最后的过期
- 最近最少使用算法(LRU)按照访问的时间排序,最早访问的过期
- 命中率:一般用于日志统计等,判断缓存质量
缓存问题
- 如何保证缓存与真实数据源之间的一致性。
项目落地
由于只使用dist目录产物作为缓存,再次构建会清除dist目录,既最大缓存数仅为1,无需考虑空间问题。
需要解决缓存一致性问题。
如何确定打包内容与缓存一致?
- 文件无修改
- 依赖环境变量一致
文件无修改
通过fast-glob快速获取所有文件名文件名 list md5后作为文件名 key 确保文件无增删改查的变化
通过fast-glob快速获取文件的lastmodify 确保文件内容无变化
环境变量一致
保证缓存构建环境变量和真实构建的环境变量一致。
这些当做主键,确定唯一性 所以无变化的产物就对应了构建的内容。