2015年03月Reading Notes

March 02, 2015

The Asset Pipeline

http://guides.rubyonrails.org/asset_pipeline.html

Asset Pipeline对网站的静态资源进行预处理(合并、简化、压缩、预处理coffeescirpt sass等)。对于静态资源的处理,这里面提到的Fingerprinting来优化http 缓存可以借鉴下。

Fingerprinting技术是在文件名中加上文件内容的标识,当文件内容改变时,文件名也改变。比如文件global.css加入md5的指纹后,文件名为global-908e25f4bf641868d8683022a5b62f54.css.

以前我们经常用query string中来标识版本,比如main.js?1.4/main.js?v=1.4.这种方式在某些CDN中有问题(有些CDN只识别文件名,新的版本文件会替换原版本的文件,在部署这个时间窗口会导致页面混乱)。

在使用浏览器缓存时,一般涉及到http header包括下面两种方案:

  1. ExpiresCache-Control: max-age (没有过期之前,完全不发送请求)
  2. Last-ModifedETag (内容协商,需要发一个请求,如果内容没有变化,响应304)

当方案2和Fingerprinting结合起来时,就比较完美了。对于现在很多开放CDN来讲,基本上都会用方案1,这是开源库名字里面的版本号就起着Fingerprinting的作用。也有用方案2的,估计是出于统计分析的目的。

对于静态资源的缓存,理想的组合是:

  1. 配置很长的本地缓存时间(善用ExpiresCache-Control: max-age),比如1年
  2. 通过Fingerprinting控制缓存(静态资源文件改变,对应的html的资源引用url也改变)

2016年05月Reading Notes

## 服务发现服务发现用于动态感知服务提供方地址,并提供服务路由分发策略能力。### 客户端发现客户端从注册中心获取服务列表,客户端监听服务列表的变化,客户端通过路由策略选择合适的服务端地址。服务端在停服务时,需要先通知客户端不要发送新请求过来,等服务端把当前请求处理完后,...… Continue reading

2016年05月Reading Notes

Published on June 19, 2016

2016年05月Reading Notes

Published on May 11, 2016