1,困惑

做web项目,对于开发者来说,一个最头痛的问题就是浏览器缓存,有缓存,js更改了,html更改了,发布服务器以后用户往往无法通过浏览器访问到最新的类容,需要用户主动去刷新页面,

因为一直做企业后台管理,针对人少的公司直接通知刷新页面(这也是做内部系统才敢这么给用户说),超千人的公司,跨省跨国的,就直接会被劈了,网上有很多解决方案,比如在js上添加版

本号这个方法可行,因为浏览器的缓存机制是针对是针对url来缓存的,比如添加:"http://test.com/test.js?verson=1.1" (这里verson只是为了好看,其实随便怎么写的可以

ru:aaa,bbb.ccc都可以只要和上次不一样就可以了).之前用做extjs的时候就是 用这种方案自定义个JavaScript标签 在每次发布文件后,都批量跟新一下版本号,这么做就保证每个js都是最新版本,这么做有个问题就是,发了一个js文件,其他文件,浏览器都要从服务器去取,如果小项目那就无所谓.

现在公司用的html页面+angular js ,自定义标签是行不通了,这里就是下nginx解决方案;

2,nginx解决方案

原理就是告诉浏览器哪些要缓存哪些不用缓存,通过设置响应头来实现

比如:

location /tpp3 {  
                root   html;  
                  #js css html 文件不缓存
                  if ($request_filename ~* ^.*?.(js|html|css)$){
                     add_header Cache-Control no-cache;
                  }
                  if ($request_filename ~* ^.*?.(txt|doc|pdf|rar|gz|zip|docx|exe|xlsx|ppt|pptx|jpg|png)$){
                    add_header Cache-Control max-age=864000;#缓存一天
                  
                 }
                proxy_pass  http://tppip/tpp3;  
                proxy_set_header  X-Real-IP  $remote_addr;  
                client_max_body_size  100m;  
                index  index.html index.htm;
                               
            }

上面只是一个最基础的列子,实际项目中,js,html ,css也是肯定需要缓存的,针对哪些图片,音频文件直接的可以长期缓存,

配置上面代码至少可以保证发布html,css,js文件,用户取到看到的效果都是最新数据,可以看下浏览器监控发现:

html:

图片:

可以发现html文件一直都是304 Not Modified 而图片都是 200ok(BFCahe)(两个区别可以参考:https://www.bokeyy.com/post/200-ok-from-cache-vs-304-not-modified.html这里)

结尾:时间有限这里只是初步介绍下还未应用到项目中,后期会有完整的前端优化解决方案,如果有更好方案的大神望分享!

nginx,控浏览器缓存,前端优化方案的更多相关文章

  1. Nginx与浏览器缓存

    Nginx与浏览器缓存 一.浏览器对缓存的处理:Internet选项 ★ 控制请求服务器策略:是忽略资源的缓存策略的情况下额外强制请求服务器的意思.  ★ 检查存储的页面较新版本 1.每次访问网页时  ...

  2. nginx 与 浏览器缓存

    一.本地静态文件 location /html/{ rewrite ^(html/.*)$ /$1 break; root /data/static; expires 12h; etag off; i ...

  3. Web前端 优化方案

    1.减少Http请求  在一个页面中图片,CSS,JS可能N个,如果每个资源都去请求一次服务器的话,那么服务器就会为每个资源开一个线程来完成,这样的话对服务器的压力就很大了.所以解决的方法就是合并资源 ...

  4. Nginx 决策浏览器缓存是否有效

    expires指令是告诉浏览器过期时间 syntax:expires [modified] time; eopch | max | off; default : off context :http,s ...

  5. # Nginx设置浏览器缓存

    配置语法 在location或if段里,来写. 格式 expires 30s; expires 30m; expires 2h; expires 30d; (注意:服务器的日期要准确,如果服务器的日期 ...

  6. nginx 禁止浏览器缓存

    如果我们使用Nginx作为静态资源服务器,那么可以使用expires进行缓存控制. location /{ expires 1s; } 如果Get页面未做任何修改,服务器就是对客户端返回304 Not ...

  7. Nginx实践篇(2)- Nginx作为静态资源web服务 - 控制浏览器缓存、防盗链

    一.控制浏览器缓存 1. 浏览器缓存简介 浏览器缓存遵循HTTP协议定义的缓存机制(如:Expires;Cache-control等). 当浏览器无缓存时,请求响应流程 当浏览器有缓存时,请求响应流程 ...

  8. CSS3与页面布局学习笔记(八)——浏览器兼容性问题与前端性能优化方案

    一.浏览器兼容 1.1.概要 世界上没有任何一个浏览器是一样的,同样的代码在不一样的浏览器上运行就存在兼容性问题.不同浏览器其内核亦不尽相同,相同内核的版本不同,相同版本的内核浏览器品牌不一样,各种运 ...

  9. 【nginx网站性能优化篇(1)】gzip压缩与expire浏览器缓存

    gzip压缩 概述 网页在服务器端经过了gzip或者其他格式的压缩后的输出明显减少了content-length字节,当访问过百万时,这些减少的字节就会变为客观的流量给节约下来;从而减轻服务器的压力以 ...

随机推荐

  1. C# Questions

    What's the difference between linkedlist and array? How do you implement linkedlist? What's the diff ...

  2. 【Alpha】Daily Scrum Meeting第七次

    一.本次Daily Scrum Meeting主要内容 各队员的任务完成情况 文件选择器布局只是暂时使用,后期会改方式,放在后面解决. 接下去都要做什么 二.项目进展 学号尾数 今日已完成任务 接下去 ...

  3. javascript平时例子⑩(表情发送)

    <!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title> ...

  4. C++11 auto and decltype

    1.auto关键字 C++新标准引入auto关键词,此auto与之前C语言的auto意义已经不一样了. 这里的auto是修饰未知变量的类型,编译器会通过此变量的初始化自动推导变量的类型. 例如:aut ...

  5. FileOutputStream和FileInputStream的用法

    public static void show() { File f=new File("d:"+File.separator+"1.txt"); FileOu ...

  6. jackson-mapper使用工具类

    import com.google.common.collect.Lists;import org.codehaus.jackson.annotate.JsonMethod;import org.co ...

  7. mysql查询正在执行的进程

    查看mysql进程有两种方法 1.进入mysql/bin目录下输入mysqladmin processlist; 2.启动mysql,输入show processlist; 如果有SUPER权限,则可 ...

  8. INotifyPropertyChanged, Interface

    Data Object(class) impliment INotifyPropertyChanged; then the Object can update BindingSource. Impli ...

  9. 更新与升级 FreeBSD

    https://www.freebsd.org/doc/zh_CN/books/handbook/updating-upgrading-freebsdupdate.html 安全补丁存储在远程的机器上 ...

  10. 首次用U盘安装CentOS

    安之前看了这篇文章,http://www.osyunwei.com/archives/2307.html,然后就开始了. 首先下载ultraiso,官网下载的,将centos的iso镜像写到u盘上. ...