CLAYYA

乌贼馋辣鱼的博客

静态资源组织

2024-11-28

静态资源组织

  • 为了最大程度利用缓存,将页面入口(HTML​)设置为协商缓存,将 JavaScript​、CSS​ 等静态资源设置为永久强缓存。

  • 为了解决强缓存更新问题,通过消息摘要算法,将文件摘要(hash​)作为资源路径(URL​)构成的一部分。

    消息摘要算法 ,对文件求摘要信息,摘要信息与文件内容一一对应,就有了一种可以精确到单个文件粒度的缓存控制依据。

    image

  • 为了解决覆盖式发布引发的问题,采用 name-hash ​而非 query-hash ​的组织方式,具体需要配置 Webpack 的 output.filename​ 为 contenthash​ 。

    image

  • 为了解决 Nginx 目录存储过大 + 结合 CDN 提升访问速度,采用了 Nginx 反向代理+ 将静态资源上传到 CDN。

    image

  • 为了上传 CDN,我们需要按环境动态构造 publicPath + 按环境构造 CDN 上传目录并上传。

  • 为了动态构造 publicPath​ 并且随构建过程插入到 HTML 中,采用 Webpack-HTML-Plugin​等插件,将编译好的带 hash + publicPath​ 的静态资源插入到 HTML 中。
    为了保证上传 CDN 的安全,我们需要一种机制管控上传 CDN 秘钥,而非简单的将秘钥写到代码 / Dockerfile​ 等明文文件中。