热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

WEB缓存探讨

媒介由于项目越来越大,纵然了运用代码压缩工具削减文件大小,js文件照样不可防止的越变越大。而关于用户来讲每次从新下载都有能够会斲丧大批时候,让我们的首屏展现有较长时候的空缺。为了提

媒介

由于项目越来越大,纵然了运用代码压缩工具削减文件大小,js文件照样不可防止的越变越大。
而关于用户来讲每次从新下载都有能够会斲丧大批时候,让我们的首屏展现有较长时候的空缺。
为了提拔网站机能,有用应用缓存能够提拔用户体验,进步接见效力。

浏览器缓存

HTML中的Meta标签

http-equiv属性,相当于http的文件头中的参数,而content的内容则是对应参数的值


然则设置pragma: no-cache并不能应用于HTTP1.1及以上范例,
而且由于这个要领太老了,假如你不须要预计那些史前客户的感觉,完全能够不加?

固然能够不必太方,另有其他的参数能够挑选运用



然则运用meta标签设置的参数优先级低于http要求中声明的,假如你同时设置了http头,那末就没有必要加上meta标签了。

固然,末了另有一个主要的一点,就是依据叉烧包的试验,meta制订这些内容能够说基础没有什么卵用:)
伤心的故事……固然能够你的浏览器还能够用哦

Header参数

最保险的显然是设置Header参数来保证资本的缓存

  1. Cache-Control
    Cache-Control 标头是在 HTTP/1.1 范例中定义的,庖代了之前用来定义相应缓存战略的标头比方 Expires。
    一切当代浏览器都支撑 Cache-Control。

    • max-age 指从要求的时候最先,许可缓存有用的最长时候(单元是s)

    • public 可被任何对象缓存。它不是必需的,由于明白的缓存信息已示意相应是能够缓存的

    • private 一般只为单个用户缓存,不许可任何中心缓存对其举行缓存

    • no-cache 示意必需先与服务器确认返回的相应是不是发生了变化

    • no-store 制止浏览器以及一切中心缓存存储任何版本的返回相应,每次要求必需从新下载

    借用谷歌爸爸的一张图来展现一下Cache-Control的挑选战略
    《WEB缓存探讨》

  2. Expires
    它代表一个缓存逾期的相对时候,在HTTP/1.0中完成,在HTTP/1.1中优先级低于Cache-Control。

它的瑕玷就是假如服务器与客户端偏差较大,那末它的偏差也会变大

  1. Last-Modified
    标记的是资本的末了修正时候,须要合营Cache-Control运用。只能准确到秒级,假如某些文件在1秒内修正屡次,则没法实时更新

  2. ETag
    相当于考证令牌。经由过程它能够可完成高效的资本更新搜检:资本未发生变化时不会传送任何数据。

ETag一般是服务器天生的文件内容的哈希值或某个其他指纹。假如要求时指纹依然雷同,则示意资本未发生变化,则可跳过下载。

参数弃用小指南

  • 假如你不斟酌ie6和HTTP 1.0客户端,那末你能够疏忽Pragma

Cache-Control: no-store, must-revalidate
Expires: 0

  • 假如你也不盘算管HTTP 1.0代办,那末你能够疏忽Expires

Cache-Control: no-store, must-revalidate

  • 假如服务器自动包括有用的Date标头,则理论上也能够省略Cache-Control,并仅依靠于Expires。不过假如客户端和服务端时候有差异,就能够会失利哦

Date: Wed, 24 Aug 2016 18:32:02 GMT
Expires: 0

  • 总的来讲照样运用Cache-Control最妥妥的(假如不盘算斟酌HTTP 1.0)

项目实践

更新文件&弃用缓存

在项目中,当我们运用当地缓存后又会碰到另一个题目——怎样更新文件、弃用缓存。
一般,我们经由过程对文件名到场指纹来完成。

以webpack为例,
写设置文件时

{
output: {
filename: "bundle.[hash].js"
}
}

为打包后的文件名加上hash,使文件更新以后会天生新的hash,以到达弃用本来缓存的效果。

定制缓存战略

能够为差别范例的文件定义差别的缓存战略,以到达最高效的效果

  1. 将HTML被标记为“no-cache”,使浏览器在每次要求时都始终会从新考证文档,并在内容变化时能够实时猎取最新版本,纵然下载新资本。

  2. 许可浏览器和中心缓存(如CDN)缓存CSS,并将CSS设置为1年后到期,超长的缓存时候能够让用户防止每次都从服务端猎取相应。同时不要遗忘给文件名加上指纹,以便实时更新修改

  3. Javascript一样设置为1年后到期,但标记为private,由于它能够会包括某些用户私家数据,这是CDN不该缓存的。

  4. 图象缓存时不包括版本或唯一指纹,并设置为1天后到期。

其他技能

  1. 削减对COOKIE的依靠,由于每次HTTP要求都邑带上COOKIE,这回增大传输流量(固然将静态资本挂载在其他域名下,也能够到达COOKIE free的效果)


推荐阅读
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • Vue基础一、什么是Vue1.1概念Vue(读音vjuː,类似于view)是一套用于构建用户界面的渐进式JavaScript框架,与其它大型框架不 ... [详细]
  • Java工程师书单(初级,中级,高级)
    简介怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序员也是工作一两年之后开始迷茫的程序 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • JavaScript设计模式之策略模式(Strategy Pattern)的优势及应用
    本文介绍了JavaScript设计模式之策略模式(Strategy Pattern)的定义和优势,策略模式可以避免代码中的多重判断条件,体现了开放-封闭原则。同时,策略模式的应用可以使系统的算法重复利用,避免复制粘贴。然而,策略模式也会增加策略类的数量,违反最少知识原则,需要了解各种策略类才能更好地应用于业务中。本文还以员工年终奖的计算为例,说明了策略模式的应用场景和实现方式。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
  • 一面自我介绍对象相等的判断,equals方法实现。可以简单描述挫折,并说明自己如何克服,最终有哪些收获。职业规划表明自己决心,首先自己不准备继续求学了,必须招工作了。希望去哪 ... [详细]
  • 前言折腾了一段时间hadoop的部署管理,写下此系列博客记录一下。为了避免各位做部署这种重复性的劳动,我已经把部署的步骤写成脚本,各位只需要按着本文把脚本执行完,整个环境基本就部署 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
author-avatar
淀死鈊
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有