如果您正在编写一个模块,并部署到互联网上,该怎么办呢?你需要编写哪种模块风格呢?
需要编写三种不同的模块类型,也就是 全局模块对象、CommonJS和AMD
如果您正在编写一个模块,并部署到互联网上,该怎么办呢?你需要编写哪种模块风格呢?
需要编写三种不同的模块类型,也就是 全局模块对象、CommonJS和AMD
HTTP/1.1定义的 Cache-Control 头用来区分对缓存机制的支持情况, 请求头和响应头都支持这个属性。通过它提供的不同的值来定义缓存策略。
Request Header与Response Header都支持这个属性 通过调整Cache-Control头可以做出很多缓存策略:
通常定义Pragma以向后兼容基于HTTP/1.0的客户端
效果同Cache-Control:no-Cache相同,区别在于HTTP响应头不支持这一个属性,不能完全取代Cache-Control属性..
在过期时间前,资源缓存是有效的,反之则缓存失效。通过不停抛弃过期的缓存资源以保证资源的实时性。注意,旧的缓存不会被抛弃或者忽略;当发起一个针对旧缓存资源的请求时,会在请求头里带上If-None-Match用来判断缓存是否还有效。如果有效,服务端返回304(Not Modified)和空的body以节省一部分带宽。
为何要有时效性:
在缓存有效期过期前,不会去询问服务器资源是否有效..如果缓存过期,就会在请求头上带上If-None-Match来判断缓存是否依旧有效
不频繁更新的文件会使用特定的命名方式:在URL后面(通常是文件名后面)会加上版本号。加上版本号后的资源就被视作一个完全新的独立的资源,同时拥有一年甚至更长的缓存过期时长。
形似如下:
如果资源请求的响应头里含有ETag, 客户端可以在后续的所有请求的头中带上 If-None-Match 头来验证缓存。
https://github.com/wujunchuan/wujunchuan.github.io/issues/26 配置或移除Etag
私有缓存只能用于单独用户。
私有缓存
缓存的种类有很多,其大致可归为两类:私有与共享缓存。
缓存类型
当 web 缓存发现请求的资源已经被存储,它会拦截请求,返回该资源的拷贝,而不会去源服务器重新下载。
这样可以重用已经获取的资源,提升网站的性能