静态资源组织
2024-11-28
静态资源组织
-
为了最大程度利用缓存,将页面入口(
HTML
)设置为协商缓存,将JavaScript
、CSS
等静态资源设置为永久强缓存。 -
为了解决强缓存更新问题,通过消息摘要算法,将文件摘要(
hash
)作为资源路径(URL
)构成的一部分。消息摘要算法 ,对文件求摘要信息,摘要信息与文件内容一一对应,就有了一种可以精确到单个文件粒度的缓存控制依据。
-
为了解决覆盖式发布引发的问题,采用
name-hash
而非query-hash
的组织方式,具体需要配置 Webpack 的output.filename
为contenthash
。
-
为了解决 Nginx 目录存储过大 + 结合 CDN 提升访问速度,采用了 Nginx 反向代理+ 将静态资源上传到 CDN。
-
为了上传 CDN,我们需要按环境动态构造 publicPath + 按环境构造 CDN 上传目录并上传。
-
为了动态构造
publicPath
并且随构建过程插入到 HTML 中,采用Webpack-HTML-Plugin
等插件,将编译好的带hash + publicPath
的静态资源插入到 HTML 中。
为了保证上传 CDN 的安全,我们需要一种机制管控上传 CDN 秘钥,而非简单的将秘钥写到代码/ Dockerfile
等明文文件中。