当前位置:  开发笔记 > 编程语言 > 正文

HTML5缓存机制之CacheManifest配置实例

CacheManifest是HTML5的一种缓存机制,文章作者直接用博客当测试环境,虽然应用起来非常简单,但效果却出奇的好。缓存后的速度,简直是惊人的快。像Yslow显示,打开一个缓存过的页面,只要0.729秒,比不缓存的差不多快了10倍。一、CacheManifest基础知识">

  Cache Manifest是HTML 5的一种缓存机制,文章作者直接用博客当测试环境,虽然应用起来非常简单,但效果却出奇的好。缓存后的速度,简直是惊人的快。像Yslow显示,打开一个缓存过的页面,只要0.729秒,比不缓存的差不多快了10倍。

  一、Cache Manifest基础知识

  作为一个Web开发相关的人员,都不会少听到、看到Cache这个词。是的,上面也已经说了,它是一种缓存的机制。它可以通过一个.manifest文件来配置需要缓存的或者一定要保持联网缓存的文件。而重点就是这个.manifest文件,这里进行了简单的整理:

  ◆MIME TYPE:text/cache-manifest

  ◆需要由你创建的:NAME.manifest

  ◆作用:主要是配置需要缓存的文件

  二、如何实现

  实现起来倒是非常简单(当然,这也是有问题的,这个我们后面讲解决方案),实现步骤如下:

  1.在服务器上添加MIME TYPE支

  比如 Apache 中可在 .htaccess 中添加:

  AddType text/cache-manifest manifest

  2.创建 NAME.manifest:

  其中第一行的CACHE MANIFEST标识是一定要有的,而CACHE/NETWORK/FACKBACK 都是可选的。如果没有写标识,则默认缓存,Cache就不用说了,缓存;NETWORK指不想缓存的页面,比如登陆页等;FALLBACK 是指当没有响应时的替代方案,比如我想请求某个页面,但这个页面的服务器挂了,那么,我可以显示另外一个指定的页面,文件结构如下:

 

  1. CACHE MANIFEST    
  2.    
  3. # VERSION 0.3    
  4.    
  5. # 直接缓存的文件    
  6. CACHE:    
  7. abc.html    
  8. images/sofish.png    
  9. js/main.js    
  10. css/layout.css    
  11.    
  12. # 需要在时间在线的文件    
  13. NETWORK:    
  14. /wp-admin/    
  15.    
  16. # 替代方案    
  17. FALLBACK:    
  18. /ajax/ ajax.html  

  至于如何更新这个配置文件?只要改变文件的内容即可,上面的# VERSION 0.3其实只是一行注释,但改变文件可以重新缓存,这样写上版本号,想更新的时候修改版本号来重新缓存,是一种比较推荐的方法,甚至可以是最佳实践。

  3.给标签加manifest属性

 

  1. <html manifest="path/to/NAME.manifest">  

  是的,就是如此简单,相信你花上30分钟也就了解了,而且能够快速的应用到工作中。

  三、Cache Manifest 存在的问题

  经过上面一整,速度明显快了许多,帮忙测试的人也小震惊了一下,只是,还是存在一些问题,看一下,然后我们尝试解决:

  1.自动缓存引用了manifest文件的页面

  即使在 NETWORK 中指定 "*"(所有的页面都)使用网络,还是不能解决它自动缓存当前页面。这使得这个页面在 manifest 没有变更的情况下,会一直以"类静态"存在。比如,你后台更新了一篇文章,这个动态的首页,还是像第一次缓存的时候一样,没有变。这对于静态页面还好,但应用在一个动态系统就很麻烦了,因为你的内容是时时要更新的。

  2.Firefox弹出提示信息

  可能是习惯了弹窗警告之类的,一不小心,用户还以为是网站被人挂马呢,想把不干净的东西存储到他的电脑。

  四、解决方案

  (一)关于自动缓存当前页面

  在《Pro HTML5 Programming》有这样一句话:这并不是Bug,而是机制的需要。虽然说这样会让页面载入更快,但对于动态页面来说就是恶心了。至少应该有一种让用户选择是否缓存当前页的配置方案(或者说是一个开关)。不过,这是暂时不能解决的,毕竟这还只是一个Draft,我们要用,就应该找一个合适的方案。

  我的想法是,看看大家有没有更好的办法。结果,查了一下,无果。新的东西,几乎所有文章说的都只是我上面说的那个如何去写一个manifest文件,看来还是没办法偷懒。然后,便开始想:

  ◆一定不要缓存动态的页面,当前页一定不能引用 manifest文件。

  ◆能不能从其他页面先载入缓存?

  那么,如果有解决方案的话,解决方法应该是:

  ◆不在当前页面引用manifest。

  ◆在用户打开页面之前,需要有一个页面来实现缓存机制。

  如果这样,那么为何不试一下iframe来引入一个拥有manifest的静态文件?但用 iframe 还能会缓存到文件?经过一翻测试,Google Chrome的调试工具给了答案:结果很不错,成功缓存。做法是这样的,新建一个cache.html文件来当做为当前页面的代理,内容如下:

 

  1. >   
  2. <html  manifest="http://www.happinesz.cn/sofished.manifest">   
  3. <head>   
  4.         <meta charset=utf-8 />   
  5.         <title>cachetitle>   
  6. head>   
  7. <body>   
  8. hi sofish!    
  9. body>   
  10. html>  

  然后,在每个页面通过iframe来引用这个静态文件,以达到我们不缓存当面页面,只缓存我们希望缓存文件的目的。

  (二)关于 Firefox 弹出警告问题

  这个,浏览器默认的,浏览器厂商的目的是为用户的安全着想,我们暂时也改变不了。其实,也不会有太大的影响,我也没有好好去想。

  五、总结

  测试下来,其实跟缓存当前页面还是有差别的,毕竟像站外的链接,特别是gravatar总要请求这么多图片,这点就又多了一点时间了。这现象主要出现在 Firefox 下,而 Webkit 而表示非常棒,速度几乎和缓存当前面一样,第二次打开的页面,都是瞬间响应的,效果非常不错。


推荐阅读
  • 深入浅出解析HTTP协议的核心功能与应用
    前言——协议是指预先设定的通信规则,确保双方能够按照既定标准进行有效沟通,从而实现准确的信息交换。例如,驯兽师通过拍手使动物坐下,这实际上是一种预设的协议。本文将详细探讨HTTP协议的核心功能及其广泛应用,解析其在现代网络通信中的重要作用。 ... [详细]
  • CSS深入剖析text和column
    这里写目录标题一、text-shadow二、font-face三、其他text常用特性四、column一、text-shadow与box-shadow类似,这里通过 ... [详细]
  • 可转债数据智能抓取与分析平台优化
    本项目旨在优化可转债数据的智能抓取与分析平台。通过爬取集思录上的可转债信息(排除已发布赎回的债券),并结合安道全教授提出的三条安全线投资策略,新增了建仓线、加仓线和重仓线,以提供更精准的投资建议。 ... [详细]
  • HTML5 Web存储技术是许多开发者青睐本地应用程序的重要原因之一,因为它能够实现在客户端本地存储数据。HTML5通过引入Web Storage API,使得Web应用程序能够在浏览器中高效地存储数据,从而提升了应用的性能和用户体验。相较于传统的Cookie机制,Web Storage不仅提供了更大的存储容量,还简化了数据管理和访问的方式。本文将从基础概念、关键技术到实际应用,全面解析HTML5 Web存储技术,帮助读者深入了解其工作原理和应用场景。 ... [详细]
  • 定义Function类型:1functionsum(num1,num2){return num1+num2;}2varsumfunction(num1,num2){returnn ... [详细]
  • Markdown语法说明:http:www.appinn.commarkdown1、前端碎片知识总结篇1.1关于浏览器IE的内核是Trident、Mozilla的内核 ... [详细]
  • 开发工具WebDeveloper1.1.8https:addons.mozilla.orgen-USfirefoxaddon60以工具栏的形式对网页的(X)HTML、脚本、多媒体、 ... [详细]
  • 小编给大家分享一下Css3中box-pack属性怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收 ... [详细]
  • 优化后的标题:利用Chrome扩展程序解锁百度网盘的大文件直下与第三方下载工具兼容性
    文章探讨了如何通过使用Chrome扩展程序来增强百度网盘的功能,特别是针对大文件的直接下载和与第三方下载工具的兼容性问题。这一方法不仅提高了下载效率,还为用户提供了更多的灵活性和便利性,解决了百度网盘在使用过程中的一些限制。 ... [详细]
  • 手机上编写和运行PHP代码的最佳软件推荐 ... [详细]
  • 本指南详细介绍了如何使用 `apt-get` 命令在 Ubuntu 系统上部署 MySQL 5、Apache 2、PHP 5 及 phpMyAdmin。首先,建议读者查阅 Ubuntu 的官方文档以获取更多背景信息。通过本文,您将逐步了解每个软件包的安装过程及其配置方法,确保系统环境的稳定性和安全性。此外,还将提供一些常见问题的解决方案,帮助用户顺利完成部署。 ... [详细]
  • 在前一篇文章中,我们介绍了如何使用Requests库发送GET请求。本文将深入探讨如何通过Requests库发送POST请求,包括参数格式、请求封装等关键技巧,并通过“历史上的今天”API实例进行详细说明。 ... [详细]
  • 怎么用@keyframes规则实现CSS动画
    这篇文章主要讲解了“怎么用@keyframes规则实现CSS动画”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来 ... [详细]
  • 爬虫入门之绘图matplotlib与词云(七)
    爬虫,入门,之,绘图,matplotl ... [详细]
  • cookie虽然在持久保持客户端数据提供了方便,分担了服务器存储的负担,但还是有很多局限。1、IE6或更低版本最多20个cookie; ... [详细]
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社区 版权所有