zoukankan      html  css  js  c++  java
  • http缓存策略-nginx只缓存js和css不缓存html

    使用缓存,是提升web性能最重要的方式之一。

    在开发单页面应用的时候,大量的单静态资源引用都是依赖于html这个文件的。例如:

    <!doctype html>
    <html lang="en">
    <head><link href="/static/css/main.dfe5fa49.css" rel="stylesheet"></head>
    <body>
    <script type="text/javascript" src="/static/js/main.c34d94a7.js"></script>
    </body>
    </html>

    html,css,js文件可以缓存 都可以缓存。设想如下场景:

    该页面内嵌入到app(或者微信)打开,静态文件缓存到app里面了。第一次访问,打开没问题,为了提升第二次访问的性能。我们应该设置缓存。缓存超时时间为1d(随便举例)。

    即一天内我们随便访问这个页面都是 会从缓存中取资源。

    问题来了:假如我们刚好在一天内,服务端静态静态资源有更新,怎么办?

    css,js文件有hash值,但是html文件没有,html如果不更新,那么我们在指定时间内永远没法取到更新后的js和css值。

    所以,我们的缓存策略是:不缓存html,只缓存js 和 css。

    基于nginx静态文件服务器设置如下:

    location /hhhh/ {
                      root   /home;
                     #index  index.html index.htm
                      try_files $uri /h5/index.html;
                      if ($request_filename ~* .*.(?:htm|html)$)
                      {
                        add_header Cache-Control "private, no-store, no-cache, must-revalidate, proxy-revalidate";
                      }
                     if ($request_filename ~* .*.(?:js|css)$)
                     {
                       expires      7d;
                     }
                    if ($request_filename ~* .*.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm)$)
                    {
                      expires      7d;
                    }
                  }

    至于其他的缓存策略,可以基于此再完善。

    至于引用一个固定名称的,没有hash值的css或js,比如 abc.css 在服务端有更新,怎么处理这种缓存,我们后续再讨论。

  • 相关阅读:
    C# TransactionScope 使用
    .Net 4.5 的async 和await 的简单理解使用
    图片的等比缩放
    IIS 8 下使用 WCF
    SQL Server 中字符串中包含字符串变量的表示方法
    jsTree 的简单用法--异步加载和刷新数据
    webService 部署以后参数输入框不能显示
    js 节点属性
    js 数组排序
    js 时间格式化 -- 时间加减实现
  • 原文地址:https://www.cnblogs.com/ldld/p/10773105.html
Copyright © 2011-2022 走看看