前端monorepo项目利用缓存优化打包速度

为什么需要缓存

公司微应用monorepo形式管理。 需要全量发布。
未来采用项目级细粒度发布,平台机进行扩容、版本管理。

存在问题

微应用数量膨胀,每次构建发布都会损耗很多时间。

为了避免重复耗时, 使用缓存复用构建结果。

什么是缓存

缓存是一种行之有效的提高系统性能的手段、
小到硬件CPU处理器,大到各类上层应用,都有缓存的身影。
比如CPU,有一级高速缓冲存储器、二级缓存提高性能。
比如客户端、CDN 、数据库、算法中空间还时间都大量使用到了缓存
作为前端,我们最熟悉的浏览器的 http 协议的缓存控制等。
又如基于内存缓存 的 redis。

缓存特征

  • 最大空间:有限的空间不能缓存所有的内容
  • 清空(淘汰)策略 :用来保持有限的空间使用
    • 先进先出策略FIFO(First In,First Out)) 队列
    • 最少使用策略(LFU)按照访问的次数排序,最后的过期
    • 最近最少使用算法(LRU)按照访问的时间排序,最早访问的过期
  • 命中率:一般用于日志统计等,判断缓存质量
    在这里插入图片描述

缓存问题

  • 如何保证缓存与真实数据源之间的一致性。

项目落地

由于只使用dist目录产物作为缓存,再次构建会清除dist目录,既最大缓存数仅为1,无需考虑空间问题。

需要解决缓存一致性问题。

如何确定打包内容与缓存一致?

  • 文件无修改
  • 依赖环境变量一致

文件无修改

通过fast-glob快速获取所有文件名文件名 list md5后作为文件名 key 确保文件无增删改查的变化

通过fast-glob快速获取文件的lastmodify 确保文件内容无变化

环境变量一致

保证缓存构建环境变量和真实构建的环境变量一致。

这些当做主键,确定唯一性 所以无变化的产物就对应了构建的内容。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_48408736/article/details/118047551