`
wjlgryx
  • 浏览: 306822 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

HTML5 缓存: cache manifes 初解

阅读更多

一、什么是 Cache Manifest
话说,作为一个 web 开发相关的人员,都不会少听到、看到 cache 这个词。是的,上面也已经说了,它是一种缓存的机制。它可以通过一个 .manifest 文件来配置需要缓存的或者一定要保持联网缓存的文件。而重点就是这个 .manifest 文件,具体的可以 Google 一下,而简单的我帮你整理一下现在可能会希望了解的东西:

MIME TYPE:text/cache-manifest
需要由你创建的:NAME.manifest
作用:主要是配置需要缓存的文件
二、如何实现
实现起来倒是非常简单(当然,这也是有问题的,这个我们后面讲解决方案),实现步骤如下:

在服务器上添加MIME TYPE支:
比如 Apache 中可在 .htaccess 中添加:

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

CACHE MANIFEST

# VERSION 0.3

# 直接缓存的文件
CACHE:
abc.html
images/sofish.png
js/main.js
css/layout.css

# 需要在时间在线的文件
NETWORK:
/wp-admin/

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

给 <html> 标签加 manifest 属性:
<html manifest="path/to/NAME.manifest">
是的,就是如此简单,相信你花上30分钟也就了解了。当时我也这样。随后也很快地应用上去。结果。结果就是像这篇文章一样还没写完,但没有时间折腾,而是速速把它撤下,等问题解决后再应用。

三、Cache Manifest 存在的问题
经过上面一整,速度当然爽,帮忙测试的人也小震惊了一下,只是,还是存在一些问题,看一下,然后我们尝试解决:

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

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



四、解决方案
(一)关于自动缓存当前页面

我查了 w3c 的文档,也看了 《Pro HTML5 Programming》的第10章(Creating HTML5 Offline Web Applications),最后还是 div into HTML5 的那句话,原意大概是:这并不是 Bug,而是机制的需要。

真是杯具,反正我能理解到的是,这是一种强加的功能。虽然说这样会让页面载入更快,但对于动态页面来说就是恶心了。至少应该有一种让用户选择是否缓存当前页的配置方案(或者说是一个开关)。不过,这是暂时不能解决的,毕竟这还只是一个 Draft,我们要用,就应用找一个合适的方案。

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

一定不要缓存动态的页面,当前页一定不能引用 manifest文件
能不能从其他页面先载入缓存?
那么,如果有解决方案的话,解决方法应该是:

不在当前页面引用 manifest
在用户打开页面之前,需要有一个页面来实现缓存机制
如果这样,那么为何不试一下 iframe 来引入一个拥有 manifest 的静态文件?但用 iframe 还能会缓存到文件?经过一翻测试,Google Chrome 的调试工具给了答案:


太给力啦!!竟然成功缓存。做法是这样的,新建一个 cache.html 文件来当做为当前页面的代理,内容如下:

<!DOCTYPE html>
<html  manifest="http://www.happinesz.cn/sofished.manifest">
<head>
        <meta charset=utf-8 />
        <title>cache</title>
</head>
<body>
hi sofish!
</body>
</html>
然后,在每个页面通过 iframe 来引用这个静态文件,以达到我们不缓存当面页面,只缓存我们希望缓存文件的目的。

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

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

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

 

  • 大小: 20.6 KB
  • 大小: 32.3 KB
分享到:
评论

相关推荐

    Lab #8: Cache

    1. **Cache的基本概念**:Cache是一种高速小容量的存储器,位于CPU与主内存之间,用来暂存最近频繁访问的数据,以便快速响应CPU的请求。通过减少CPU等待时间,Cache显著提高了系统的运行速度。 2. **Cache的层次...

    高速缓存(Cache)的Verilog代码

    该工程包含数据缓存D_Cache和指令缓存I_Cache的Verilog代码和仿真文件,Cache的详细技术参数包含在.v文件的注释中。 直接相连16KB D_Cache Cache写策略: 写回法+写分配 (二路)组相连16KB I_Cache Cache替换策略: ...

    Oracle Cache Fusion 原理介绍

    3. 缓存同步:Cache Fusion 通过对缓存的同步来确保集群中的数据块的一致性和完整性。 4. 恢复机制:Cache Fusion 提供了恢复机制,以便在集群中的节点出现故障时快速恢复数据块。 Cache Fusion 的优点包括: 1. ...

    后端缓存技术:Cache-Control.zip

    后端技术系列教程,包括: API开发全套教程 后端安全全套教程 后端微服务架构全套教程 后端性能优化全套教程 后端框架全套教程 后端缓存技术全套教程 后端编程语言全套教程 数据库技术全套教程

    CacheTool:一个清除APC/opcode缓存的类库.zip

    - 清理APC缓存:CacheTool提供了清除全局和用户级别的APC缓存的选项。 - 清理opcode缓存:对于OPcache,CacheTool可以帮助你快速清空整个缓存,或者仅删除特定的脚本缓存。 - 查看缓存状态:你可以获取当前APC或...

    ARM高速缓存(Cache)Verilog代码 包含ISE工程

    该工程包含数据缓存D_Cache和指令缓存I_Cache的Verilog代码和仿真文件,附带可运行的ISE工程文件,Cache的详细技术参数包含在.v文件的注释中。 直接相连16KB D_Cache Cache写策略: 写回法+写分配 (二路)组相连16KB ...

    ASP.NET 缓存:方法和最佳实践

    本文主要讨论了ASP.NET中三种主要的缓存方式:页面级输出缓存、用户控件级输出缓存(片段缓存)以及缓存API。下面将详细阐述这些缓存方法及其最佳实践。 1. **页面级输出缓存** 页面级输出缓存是最简单的缓存形式,...

    数据库缓存:释放性能瓶颈的金钥匙

    在应用程序中,可以利用现有的缓存库,比如 Laravel 的 Cache 门面来简化缓存逻辑的实现: ```php use Illuminate\Support\Facades\Cache; // 缓存数据 Cache::put('user:1000', 'John Doe', 3600); // 获取缓存...

    第5关:直接相联cache设计.txt

    第5关:直接相联cache设计 本设计是关于直接相联高速缓存(cache)的设计,采用Logisim软件进行实现。在本电路设计中,我们将构建一个简单的直接相联cache,以展示数据如何被存储和检索的过程。 ### 直接相联高速...

    PHP常见缓存技术分析(cache)

    **PHP常见缓存技术分析(cache)** 在Web开发中,缓存技术是提升系统性能的关键因素之一。PHP作为广泛使用的服务器端脚本语言,提供了多种缓存策略以优化应用程序的运行速度。本文将深入探讨PHP中的常见缓存技术,...

    存储体系实验-利用高速缓存(Cache)的局部性优化矩阵乘法

    2. **缓存块大小**:Cache将内存数据分块存储,块大小的选择会影响缓存效率。如果块太小,可能导致更多的缓存缺失;反之,如果太大,可能浪费Cache空间。 3. **缓存映射策略**:如直接映射、全相联映射和组关联映射...

    spring-cache(通过key值更新缓存)

    5. **条件式缓存更新**:在某些情况下,我们可能希望有条件地更新缓存,而不是每次调用方法都更新。这可以通过在`@CacheEvict`上设置`condition`属性实现。例如: ```java @CacheEvict(value = "myCache", key = ...

    图片缓存DiskCache demo

    5. **加载图片**:使用`ImageLoader.displayImage()`方法加载图片,这个方法会自动处理缓存逻辑。如果图片已经在DiskCache中,那么直接从磁盘读取;否则,从网络下载并存入缓存。 6. **清理缓存**:定期清理过期...

    day37 05-HIbernate二级缓存:一级缓存更新同步到二级缓存及二级缓存配置文件

    `hibernate.cache.use_query_cache`和`hibernate.cache.use_second_level_cache`分别开启了查询缓存和二级缓存。最后,通过`class-cache`元素配置了`EntityClass`的缓存策略,这里使用了"read-write",表示读写操作...

    Android WebView 缓存详解

    而缓存的索引放在:/data/data//databases 对应的文件放在:/data/data/package_name/cache/webviewCacheChromunm下 数据缓存:分为AppCache和DOM Storage两种 我们开发者可以自行控制的就是这些缓存资源 AppCache...

    think固态硬盘缓存驱动expresscache破解

    think固态硬盘缓存驱动expresscache破解

    CacheTool:一个清除APC/opcode缓存的类库

    **CacheTool:APC与Opcode缓存清理利器** 在PHP开发中,缓存技术是提升网站性能的关键之一。其中,Alternative PHP Cache (APC) 和 Zend Optimizer+ 的Opcode缓存是两个常用的PHP加速工具。它们能够将PHP代码编译为...

    Memory Systems - Cache, DRAM, Disk

    内存系统分为几个层次,包括高速缓存(Cache)、动态随机存取存储器(DRAM)和磁盘存储。每层都有其独特的特性和功能,并且在整个存储体系中扮演着各自的角色。 缓存是计算机内存系统中最接近CPU的部分,它用于临时...

Global site tag (gtag.js) - Google Analytics