单页应用部署时缓存策略
问题描述
前端网站采用Vue + Nginx的方式进行生产环境部署。
系统在发布更新次日,收到客户的投诉,发现登录系统之后,出现页面空白问题,刷新几次后显示正常。查看日志发现:
2019/01/07 10:26:01 [error] 19#0: *833 open() "/.../static/js/0.4a66cb25e7f24262c3f6.js" failed (2: No such file or directory), client: XX.XX.XX.XX, server: localhost, request: "GET /static/js/0.4a66cb25e7f24262c3f6.js HTTP/1.1"
问题分析
由于vue在build之后,会重新生成index.html + static资源。从日志判断,【/static/js/0.4a66cb25e7f24262c3f6.js】是上一版本的静态资源。而index.html中get请求获取,跟浏览器缓存有关。
但是查看nginx配置,发现没有配置缓存策略。
server { listen 80 default_server; server_name localhost; root /www/; index index.html index.htm; location / { try_files $uri $uri/ index.html; } }
当http头中无缓存配置,那么将使用浏览器默认缓存策略,如下:
先放上结论吧,Chrome和Firefox对js、css之类的文件,在内存中的缓存时长,是: (访问时间 - 该文件的最后修改时间) ÷ 10
- 假设文件 a.js 最后编辑时间是 2018年12月1号 10点0分0秒;
- Chrome的第一次访问时间是 2018年12月1号 12点0分0秒;
- 第一次访问与文件编辑时间相差2小时,即7200秒,那么缓存时长就是720秒
解决方案
http请求头中,通过cache-control声明缓存策略。
- 对于index.html采用no-cache策略,客户端使用缓存,但是使用前需要与服务器确认版本状态。
- 对于static资源,采用客户端缓存。
nginx配置参考:
location /index.html { add_header "Cache-Control" "no-cache"; } location /static/ { access_log none; expires 14d; } location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://127.0.0.1:8081; client_max_body_size 500m; } location = / { }
参考资料
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
如何使用kafka增加topic的备份数量,让业务更上一层楼
本文由云+社区发表 一、困难点 建立topic的时候,可以通过指定参数 --replication-factor 设置备份数量。但是,一旦完成建立topic,则无法通过kafka-topic.sh 或者 命令修改replica数量。 二、解决办法 实际上,我们可以考虑一种 “另类” 的办法:可以利用 kafka-reassign-partitions.sh 命令对所有分区进行重新分布,在做分区重新分布的时候,通过增加每个分区的replica备份数量来达到目的。 本文将介绍如何利用 kafka-reassign-partitions.sh 命令增加topic的备份数量。 注意:以下命令使用到的topic名称、zookeeper的ip和port,需要读者替换成为实际集群的参数。 (假设kafka集群有4个broker,id分别为:1001,1002,1003,1004) 2.1、获取当前topic的所有分区分布在broker的情况 [root@tbds bin]# ./kafka-topics.sh --zookeeper 172.16.32.13:2181 --topic ran...
- 下一篇
这样做动画交互,一点都不费力!
本文由云+社区发表 作者:paulzeng **导语:**Lottie是Airbnb开源的一个面向 iOS、Android、React Native 的动画库,可实现非常复杂的动画,使用也及其简单,极大释放人力,值得一试。 一、简介 Lottie 是Airbnb开源的一个面向 iOS、Android、React Native 的动画库,能分析 Adobe After Effects 导出的动画,并且能让原生 App 像使用静态素材一样使用这些动画,完美实现动画效果。 现在使用各平台的 native 代码实现一套复杂的动画是一件很困难并且耗时的事,我们需要为不同尺寸的屏幕加载不同的素材资源,还需要写大量难维护的代码,而Lottie可以做到同一个动画文件在不同平台上实现相同的效果,极大减少开发时间,实现不同的动画,只需要设置不同的动画文件即可,极大减少开发和维护成本。 官方效果图: 二、如何使用 Lottie支持多平台,使用同一个JSON动画文件,可在不同平台实现相同的效果。 Android 通过Airbnb的开源项目lottie-android实现,最低支持 API 16; IOS 通过...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS关闭SELinux安全模块
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2全家桶,快速入门学习开发网站教程