单个文件级别
大概思路:
假设客户端可缓存无限容量的资源文件(html,css,js),缓存时间可自定义。
用户每次访问项目,都发送一个资源文件是否最新的请求。
如果有更新,拉取更新的文件,刷新本地缓存。
如果没有更新,读取本地缓存资源文件。
稍微具体流程:
- 服务器上所有资源文件的发布,都会产生对应的唯一编码(发布时间戳或者资源内容的MD5编码),从而生成一个映射表文件。
- 客户端请求时,发送客户端的映射表文件版本,是否跟服务器端的映射表文件版本一致。
- 不一致时,获取最新的映射表文件,然后客户端进行文件对比,然后拉取最新的资源文件,刷新本地缓存。
- 可以把服务端多个资源文件打包成一个压缩包,客户端自行解压,来减少请求个数。
字符级别
- 客户端有合并增量更新代码的能力,类似
git merge
。 - 服务端每次 build 的时候,同时生成最新版本与之前 n 天之内所有版本的 diff,类似
git diff
。 - 客户端请求时,发送客户端的映射表文件版本,是否跟服务器端的映射表文件版本一致。
- 不一致时,获取diff信息,本地进行diff,刷新缓存。