egret-docs-master/Native/manual/httpcache.md

3.5 KiB
Raw Blame History

title
原生缓存策略
  • 以下内容仅适用于应用运行过程中下载的资源assets、预加载目录下的资源不会被runtime更新。
  • index.html 不会被缓存,每次都会从服务器读取.
  • 不想被缓存的资源,可以通过增加随机值的方法来请求

例如:

var xhr = new XMLHttpRequest();
xhr.open('GET', './manifest.json?v=' + Math.random(), true);
  • runtime支持服务器的缓存策略比如Cache-Control:max-age=age runtime下载的资源只有超出了max-age设置的过期时间以后才会向服务器发送资源的更新请求。此外在过期以后如果服务器上的资源没有发生变化runtime不会重新下载这个资源。只有资源发生变化时才会重新下载。

一、支持的http缓存字段

1.1 Cache-Control字段及取值清单

Cache-Control:no-cache
Cache-Control:no-store
Cache-Control:max-age=age

对于其他取值runtime则会通过下面的Date字段、Expires字段和Last-Modified字段等信息计算缓存是否有效。

其中,

Cache-Control:no-cache

表示禁用缓存;

Cache-Control:no-store

表示不存储任何信息;

Cache-Control:max-age=age

表示缓存在age时间内有效age的取值为数字单位为秒。

1.2 Pragma字段及取值清单

Pragma:no-cache

表示禁用缓存为HTTP1.0的标准优先级低于

Cache-Control:no-cache

1.3 Date字段及取值清单

Date:HTTP-date

表示响应是在HTTP-date所代表的时间生成的。例如

Date: Tue, 15 Nov 1994 08:12:31 GMT

表示的是响应是在Tue, 15 Nov 1994 08:12:31 GMT生成的。

1.4 Expires字段及取值清单

Expires:HTTP-date

表示缓存在HTTP-date所代表的的时间之后失效。例如

Expires: Thu, 01 Dec 1994 16:00:00 GMT

表示缓存是在Thu, 01 Dec 1994 16:00:00 GMT之后失效。

如果不存在

Cache-Control:max-age=age

Expires:HTTP-date

字段那么runtime会使用Date字段和Last-Modified字段等信息计算缓存是否有效。

1.5 Last-Modified字段及取值清单

Last-Modified:HTTP-date

表示资源在服务器上的最后修改时间。例如:

Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT

表示资源在服务器上的最后修改时间是Tue, 15 Nov 1994 12:45:26 GMT。

1.6 ETag字段及取值清单

ETag:entity-tag

表示资源在服务器上的唯一标志entity-tag是一个服务器能够理解的值。

二、使用说明

为了合理的利用资源减少不必要的流量消耗服务器端应该合理的配置响应头字段从而使得runtime和浏览器能够更加高效的使用缓存资源。

2.1 设置缓存的有效期

使用

Cache-Control:max-age=age

Expires:HTTP-date

都可以设置缓存的有效期但是一个是HTTP 1.1标准一个是HTTP 1.0标准并且如果两个同时出现那么前者的优先级高于后者。推荐使用前者或者两者同时配置。如果不配置那么runtime和浏览器就会自己计算有效期这样的话不利于实现服务器和客户端的紧密配合。因此推荐设置缓存的有效期。

2.2 设置Last-Modified和ETag

当缓存失效的时候runtime和浏览器会将这两个值加入到请求头中使服务器能够高效的判断资源是否过期从而决定是返回304还是返回200。

推荐配置Last-Modified和ETag。如果两者同时出现服务器会优先使用ETag进行处理。