Web缓存是指一个Web资源(如html页面,图片,js,数据等)存在于Web服务器和客户端(浏览器)之间的副本。缓存会根据进来的请求保存输出内容的副本;当下一个请求来到的时候,如果是相同的URL,缓存会根据缓存机制决定是直接使用副本响应访问请求,还是向源服务器再次发送请求。比较常见的就是浏览器会缓存访问过网站的网页,当再次访问这个URL地址的时候,如果网页没有更新,就不会再次下载网页,而是直接使用本地缓存的网页。

Web缓存的作用

使用Web缓存的作用其实是非常显而易见的:

1.减少网络带宽消耗

无论对于网站运营者或者用户,带宽都代表着金钱,过多的带宽消耗,只会便宜了网络运营商。当Web缓存副本被使用时,只会产生极小的网络流量,可以有效的降低运营成本。

2.降低服务器压力

给网络资源设定有效期之后,用户可以重复使用本地的缓存,减少对源服务器的请求,间接降低服务器的压力。同时,搜索引擎的爬虫机器人也能根据过期机制降低爬取的频率,也能有效降低服务器的压力。

3.减少网络延迟,加快页面打开速度

带宽对于个人网站运营者来说是十分重要,而对于大型的互联网公司来说,可能有时因为钱多而真的不在乎。那Web缓存还有作用吗?答案是肯定的,对于最终用户,缓存的使用能够明显加快页面打开速度,达到更好的体验。特别是移动端没wifi的情况下。

cache用法

1.首先要在请在文档的 <html> 标签中包含 manifest 属性:<html manifest="/root/demo.appcache">

每个指定了 manifest 的页面在用户对其访问时都会被缓存。如果未指定 manifest 属性,则页面不会被缓存。

2.manifest 文件的建议的文件扩展名是:".appcache"。请注意,manifest 文件需要配置正确的 MIME-type,即 "text/cache-manifest"。必须在 web 服务器上进行配置(不懂就让后端开发人员设置一下呗)。

3.编写manifest文件

CACHE MANIFEST

#version2.1

CACHE:

/static/wap/js/zepto.min.js

/static/wap/css/animations.css

/static/wap/images/loading.gif

NETWORK:

/static/wap/css/base.wap.css

/static/wap/css/details.wap.css

FAILBACK :

/html5/ /404.html

必须声明CACHE MANIFEST在第一行,#是注释,最大的作用是缓存文件更新了,客户端无法更新主动更新缓存的时候,修改注释信息也可以出发客户端浏览器重新加载所有缓存的文件。

CACHE 指定缓存的文件,路径相当于manifest文件的路径。

NETWORK 指定不缓存的文件,每次都从服务器获取,如果不指定,在使用manifest的文档,不指定则默认为cache缓存

FAILBACK 指定第一个 URI 是资源,第二个是替补。

这样就实现了cache应用缓存了!

如何更新缓存

如下三种方式,可以更新缓存:

1.更新manifest文件

2.通过javascript操作

3.清除浏览器缓存(要用户自己这样操作是不可能的啦)

给manifest添加或删除文件,都可更新缓存,如果我们更改了js,而没有新增或删除,前面例子中注释中的版本号,可以很好的用来更新manifest文件。html5中引入了js操作离线缓存的方法,下面的js可以手动更新本地缓存。window.applicationCache.update();

使用总结:

1.有ajax请求的地址也要单独写上去,请求不确定的情况下最好写上*号。

2.缓存文件更新控制不灵活,每次修改文件的时候要顺带修改cache文件,无疑是增加了维护成本。就目前HTML5提供的manifest机制来讲,一个页面只能引用一个manifest页面,而且一旦发现这个manifest改变了,就会把里面所有定义的缓存文件全部重新拉取一遍,不管实际上有没有更新,控制比较不灵活。针对这个问题,也有的同学提出了一些建议,比如把需要缓存的文件分模块切分到不同manifest中,并分开用HTML引用,再使用强大的iframe嵌入到入口页面,这样就当某一个模式需要有更新,不会导致其他模块的文件也重新拉取一遍。

3.站点离线存储的容量限制是5M,超过5M的会缓存失败

4. 系统会自动缓存引用清单文件的 HTML 文件

5.引用manifest的html必须与manifest文件同源,在同一个域下

6.站点中的其他页面即使没有设置manifest属性,请求的资源如果在缓存中也从缓存中访问

7. 当manifest文件发生改变时,资源请求本身也会触发更新

HTML5 API详解(11):Cache 应用程序缓存,这下离线也可以玩了相关推荐

  1. HTML5 API详解(16):web socket 全双工通信

    目前实时Web应用的实现方式,大部分是围绕轮询和其他服务器端推送技术展开的,其中最著名的是Comet.Comet技术可以让服务器主动以异步方式向客户端推送数据. 使用轮询时,浏览器定期发送HTTP请求 ...

  2. HTML5 API详解(15):History 不刷新也可以实现网页跳转

    HTML4中的History API history这个东西大家应该都不陌生,我们经常使用history.back(-1)来实现后退功能,具体的属性和方法如下: 属性 length 历史的项数.Jav ...

  3. HTML5 API详解(5):Page Visibility API帮您省流量,提高体验

    页面可见性API可以让你知 道一个页面什么时候是隐藏的,什么时候是显示的.当页面被最小化或者被切换成后台标签页时,浏览器会触发一个 visibilitychange事件,告诉你用户已经看不到这个页面了 ...

  4. HTML5 API详解(18):IndexedDB 本地存储

    Web SQL Database实际上已经被废弃,而HTML5的支持的本地存储实际上变成了Local Storage和Session Storage与IndexedDB.Web Storage使用简单 ...

  5. HTML5 API详解(17):Web SQL DataBase本地数据库

    Web SQL Database是一个已经废弃的规范,但是鉴于除了IE和Firefox,其他浏览器都已经实现了Web SQL Database,并且它还具有一些HTML5 Storage所不具有的特性 ...

  6. HTML5 API详解(14):Notification 实现桌面提醒

    桌面提醒功能可以在窗口隐藏甚至是浏览器最小化(不被激活)的情况下,依然可以对用户进行信息通信,采用的方式就是在电脑桌面的右下角弹出消息提示框.这样的一个功能可以使用在一些消息推送的场景下.不过,虽然h ...

  7. HTML5 API详解(3):为何网页上要增加Battery电池状态API

    手机自身的电源管理已经相当不错了,那为何网页上还要增加一个HTML5 Battery电池状态API呢? 随着HTML5以及CSS3技术支持与发展,以及手机越来越高性能带来的可行性.移动端的页面显然会越 ...

  8. HTML5 API详解(12):canvas画布API提供的内容很丰富啊~

    不考虑代码质量的话,一般来说css3>canvas>纯js. 1. css3动画是独立与js线程的,js的运算操作不会阻塞css3的动画,所以在系统cpu占用率较高的时候,css3的动画性 ...

  9. HTML5 API详解(8):worker多线程教你如何避免页面卡死

    web worker是html5 提供的一个JavaScript多线程的解决方案,worker用于处理一些大量复杂耗时的计算,免得页面冻结.挂起.卡死. 比如:我们要运算一个复杂的数学计算:递归计算. ...

最新文章

  1. springboot 分层_限量!阿里Spring Boot成长笔记终开源!理论实战满满
  2. 允许root远程登录Solaris
  3. mysql脚本下载_Mysql备份脚本
  4. 机器学习从入门到精通系列之BP神经网络理论知识详解
  5. 笔记-项目质量管理-复习要点
  6. python怎样入门_python怎么入门啊?
  7. 全球权威MLPerf基准测试再发榜,浪潮AI服务器创18项AI性能纪录
  8. 傲游浏览器语言怎么切换 傲游浏览器语言切换方法简述
  9. Gnome即将满18岁,适用于Docker,Kali Linux 2.0的新工具以及更多新闻
  10. favicon.ico在ie下面不显示的解决方法
  11. OSPF基础知识及配置命令
  12. Aliplayer自定义组件
  13. MPU6050+一阶互补滤波
  14. IIS 405 Method Not Allowed
  15. cocosCreator 全局变量(Ts版)
  16. 写给女儿的话---小荷作文万米写书序言
  17. vue 子组件调用($emit)父组件方法后父组件方法如何回调子组件方法
  18. utf8汉字编码16进制对照
  19. Web前端工程师学习路径图,你掌握了多少?
  20. 【Tableau Desktop 企业日常问题23】Tableau 筛选之后如何保持原有排序顺序?

热门文章

  1. 2020年灵活用工行业研究报告
  2. nuxt添加.html,Nuxt内导航栏的两种实现方式
  3. mysql 5.7 多主一从_mysql5.7多主一从,从机调优
  4. python导入xlsxwriter要安装什么吗_windows下安装Python的XlsxWriter模块方法
  5. stm32f407 tim4 复用_波分复用对比,CWDM、DWDM、CCWDM有何不同?
  6. 专题:区块链与数据共享(下)
  7. 【离散数学】含有两个量词的谓词逻辑公式
  8. datagrid——jQuery EasyUI
  9. python-发邮件脚本
  10. 在众多编程语言中,你可知哪种语言的安全性更高,安全漏洞最少?