`

Web Cache, H5 AppCache, SW Cache 三者的浅析和比较

阅读更多

HTTP Cache

在HTTP1.1中caching的作用一是在很多情况下消除向服务器发送请求,二是一些情况下消除发送完整response的需要。 前者减少了许多操作网络来回通信的数量,使用“过期”的机制来达到此目的;后者减少了网络带宽的需求,我们使用“确认”机制来达到此目的。 
庆幸的是所有浏览器都有HTTP Cache的实现。 开发者只要保证每个服务器端的响应提供了正确的HTTP header指令去知道浏览器 响应可以被浏览器何时cache,cache多久。

这里写图片描述

**每个response的header的信息:**
Http 响应码:
Content-Length: 1024    表示这个response有1024字节的大小
Cache-Control: max-age=120   表示client可以cache这个response最长120秒
Etag: "x234dff"   这个确认记号可以在response过期之后来check这个资源是否被修改了。

举一个具体的例子,假设初始获取的response已经过了120秒,浏览器会发起一个对同样资源的新的请求。 首先,浏览器检查本地的cache并找到了之前的response,不幸的是它已经过期了。 这个时候可以简单地重新发起一个请求获得一个新的response,但这是没有效率的,因为如果response的内容没有改变那么我们就没有理由重新下载一个一样的文件。这是Validation token(即header中的Etag)所解决的问题:服务器生成并返回一个由文件内容独有的特征生成的一个记号。Client不需要知道这个记号是怎么生成的,只需要在下一次请求中把这个token发到服务器端。 如果记号一致,那么就是资源没有change,不需要重新下载。 
这里写图片描述

那么作为一个web开发者所要做的就是确保服务器端提供了必要的Rtag tokens; 检查服务器文档和必要的配置项。

Cache-Control: 该指令控制谁可以cache响应,在什么情况下cache,cache多久。 
最好的请求是不需要和服务器通信的:一个本地的复印件允许我们消除所有的网络延迟并避免了数据传输过程中的数据丢失风险。 
“no-cache”: 指返回的response不能在没有首先检查服务器的response是否改变的情况用来满足后继的对同一url的请求 
“no-store”: 指不允许浏览器或其他的中间cache用来存储任何版本的response,即每次请求都必须下载。

“public”: 指该response可以被cache,即使它有HTTP认证。 通常该指令是不需要的,因为现实的cache信息通常有“max-age” 
“private”: 指responses只能被一个单独的用户cache,不能被任何其他中间cache缓存,比如不能被CDN缓存。 
“max-age” 
<code>这里写图片描述</code> 
具体的cache policy参见该文章。

Ref: https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching?hl=en  Http caching byiLya Grigorik


HTML5 APPCache

Here we go. H5的AppCache的动机是为web应用提供离线体验,具体上有三个优势:

  • 离线浏览,用户可以离线在你整个站点内跳转(navigate);
  • 速度,资源可以从硬盘上读取而不用联网;
  • 可条件性(Resilience), 如果你的维护时挂掉了,你哟农户可以获得离线体验。

使用Appcache需要定义一个cache mannifest文件,来指定浏览器哪些资源可以被缓存。 
启用application cache需啊哟在每个想要缓存的页面的html标签上加上一个manifest属性,like this: 
这里写图片描述

这意味着任何用户跳转到的页面包含manifest属性的都建隐式地被加入application cache。像这样的”/page-url/”, “/page-url/?something”, “/page-url/?something-else”会被当成单独的页面,所以AppCache更好地用在单独的url上,实际上这也成为了它一个缺陷。

But, Application Cache is a douchebag. 参见http://alistapart.com/article/application-cache-is-a-douchebag 这篇文章。


Service Worker Cache

Service worker是一种独立于broswer js线程的proxy server,可以拦截站点的请求并做一些处理,同时提供了单独管理的cache用来缓存response。SW设计的初衷也是为了解决web应用的离线体验的问题,解决H5 Appcache的弊端。


三者的区别和联系:

SW的cache完全独立于HTTP Cache,完全由开发者自己手动管理和更新; 
区别于H5 AppCache,SW是可以作用于整个site的, 即是可以跨页面的;且也为了避免上文提到的AppCache的一系列弊端;

 

 

http://blog.csdn.net/u010875425/article/details/50037963

分享到:
评论

相关推荐

    前端开发技术分享 浏览器怎么实现 AppCache - Offline Application Cache 共17页.pdf

    离线应用缓存(Application Cache),也称为AppCache,是Web应用程序的一种离线存储机制。它允许开发者通过一个名为`manifest`的特殊文件来指定一系列静态资源,浏览器会根据这个清单文件自动下载并缓存这些资源,...

    H5的爱心和相册

    开发者或使用者需要解压文件,然后根据项目结构和说明来运行和编辑这个H5应用。 总的来说,"H5的爱心和相册"项目结合了HTML5、CSS3和JavaScript等技术,创造出一个富有情感和互动性的在线相册平台,不仅展示了H5...

    android APPCache

    在Android开发中,APPCache是应用缓存的一种方式,它主要用于存储临时数据,提升应用程序的性能和用户体验。当用户再次访问相同数据时,可以从缓存中快速读取,避免了网络延迟或I/O操作,降低了服务器压力。本篇文章...

    Android代码-AppCache

    AppCache Android app DiskLruCache缓存封装 1.5.0的版本是有史以来最大的更新,一个字,就是简单易用!!! 介绍 Android 应用缓存很常见,大多数应用都在使用DiskLruCache缓存技术,也有很多人介绍过DiskLruCache...

    h5和js等思维导图.rar

    本压缩包文件“h5和js等思维导图.rar”提供了关于这些技术的思维导图,帮助学习者系统地理解和掌握相关知识。 首先,HTML5作为最新的超文本标记语言版本,主要改进了对多媒体的支持,增强了离线存储功能,简化了...

    h5新技术(含课件和代码)

    总的来说,“h5新技术(含课件和代码)”这个资源包提供了一个全面的学习路径,无论你是初入Web开发的小白,还是寻求技术进阶的开发者,都能从中受益匪浅。通过深入学习和实践,你可以更好地掌握HTML5技术,提升自己的...

    微信表白H5源码

    2. **离线存储**:通过`AppCache`和`Service Worker`,H5源码可以实现离线访问,即使在网络不稳定的情况下,表白页面也能正常展示。 3. **Canvas与SVG**:这两个图形绘制技术可以让开发者创建动态、交互式的视觉...

    百度质量部年会H5宣传

    其次,H5的离线存储特性(如AppCache和Service Worker)使得即使在网络不稳定的情况下,用户也能访问到内容,这对于一个宣传性质的H5页面来说,可以提供更好的用户体验。考虑到年会可能会吸引大量用户同时访问,这种...

    Android与H5互调

    Android与H5的互调使得原生应用可以利用Web技术的优势,如跨平台性、快速迭代和丰富的用户界面,同时也让Web应用能够访问设备的硬件资源,提供更接近原生应用的体验。以下我们将详细探讨这一主题。 1. **WebView...

    h5手机源码格子酒店

    2. **离线存储**:HTML5的离线存储(Offline Storage)功能,如AppCache和Service Worker,允许部分数据在用户首次访问时缓存,即使在网络不稳定或无网络的情况下,也能快速加载页面,提高用户体验。在格子酒店应用...

    H5非常炫酷的加载特效loading

    在现代Web开发中,H5(HTML5)已经成为构建交互式和动态网页的标准。加载特效,尤其是“炫酷”的加载特效,是提升用户体验的关键部分,它们可以吸引用户注意力,同时在内容加载期间提供视觉反馈。"H5非常炫酷的加载...

    AppCache,Android应用程序磁盘缓存.zip

    标题中的“AppCache”指的是Application Cache,它是HTML5标准中的一部分,主要用于离线存储Web应用的资源,使得用户在没有网络连接的情况下也能访问这些应用。Android应用程序磁盘缓存则是Android系统为了提高应用...

    h5+设计测试代码

    6. **Web Workers和Web Storage**:这两个特性分别用于后台处理和本地数据存储,提高了网页应用的性能和用户体验。 7. **表单控件**:HTML5对表单控件进行了增强,添加了新的输入类型(如date、email、url等)和...

    陶国荣H5培训课件

    这个课件旨在帮助学习者掌握现代网页开发的核心技术和最佳实践,尤其针对那些希望通过深入学习H5和AngularJS提升自己在前端领域技能的人群。 HTML5是Web开发的最新标准,它带来了许多改进和新特性,旨在提高网页的...

    HTML5 Application Cache 应用程序缓存

    !!!!!服务器需要添加配置!!!!!!!!! 建议使用Google Chrome 测试 我的是Apache服务器 conf/httpd.conf 文件的mime_module 中添加 . . . AddType text/cache-manifest .appcache &lt;/IfModule&gt;

    WEB手机端万年历日历代码

    7. **离线存储(AppCache)**:虽然Service Worker现在更为推荐,但早期的HTML5应用可能会使用Application Cache(AppCache)来实现离线访问,让用户在没有网络连接的情况下也能查看日历。 8. **表单输入类型**:...

    412_HTML手机电脑网站_网页源码移动端前端_H5模板_自适应响应式源码.zip

    3. **离线存储**:通过Application Cache(AppCache)功能,HTML5允许网页在用户离线时也能访问部分数据,提高了应用的可用性。 4. **Canvas画布**:元素提供了在网页上进行动态图形绘制的能力,为游戏开发和数据...

    Application Cache未缓存文件无法访问无法加载问题

    在Web开发中,Application Cache(应用缓存)是一种离线存储技术,允许浏览器将网站的部分或全部内容存储在本地,以便在用户离线时仍然可以访问这些内容。然而,使用Application Cache时,可能会遇到未缓存文件无法...

    仿酷6 h5 视频网站 手机app

    4. **离线存储**:通过`AppCache`和`Service Worker`,网站可以缓存资源,即使在网络不稳定或无网络的情况下也能正常访问部分页面。 5. **Geolocation API**:获取用户地理位置信息,为本地化服务和定位应用提供支持...

    HTML5移动Web开发指南

    HTML5提供了Web Storage(包括localStorage和sessionStorage)和Application Cache(AppCache),用于在本地存储数据,使得Web应用可以实现离线访问。localStorage用于持久化存储,而sessionStorage则仅在会话期间...

Global site tag (gtag.js) - Google Analytics