Page 236 - Web性能权威指南
P. 236
某本地资源不在缓存中,那么浏览器就会发送网络请求,将响应自动填充到缓存中,
以备后续访问使用。
• 浏览器针对每个资源自动执行缓存指令。
• 浏览器会尽可能恢复失效资源的有效性。
• 浏览器会自动管理缓存大小及资源回收。
高效、最优地管理缓存很困难。所幸,浏览器会替我们照管这一切,我们要做的,
只是确保服务器返回适当的缓存指令(参见 13.1.1 节“在客户端缓存资源”)。你已
经让服务器对页面的所有资源都返回 Cache-Control、ETag 和 Last-Modified 等响应
首部了,对不?
最后,浏览器还有一个经常被人忽视的重要功能,那就是提供会话认证和 cookie 管
理。浏览器为每个来源维护着独立的 cookie 容器,为读写新 cookie、会话和认证数
据提供必要的应用及服务器 API,还会为我们自动追加和处理 HTTP 首部,让一切
都自动化。
举一个简单但直观的例子,它能说明把会话状态管理委托给浏览器的好处:
认证的会话可以在多个标签页或浏览器口间共享,反之亦然;如果用户在
某个标签页中退出,那么其他所有打开窗口中的会话都将失效。
14.4 应用API与协议
在浏览器提供的网络服务的最上层,就是应用 API 和协议。前面介绍了下层提供
的各种重要服务:套接字和连接管理、请求和响应处理、各种安全机制、缓存,等
等。我们每次发起 HTTP 或 XMLHttpRequest 请求,或者长 Server-Sent Event 或
WebSocket 会话,或者打开 WebRTC 连接,都需要与其中一些或全部底层服务打
交道。
不存在哪个协议或 API 最好的问题。每个稍微复杂点的应用都会基于不同的需
求用到各种传输机制,包括读写浏览器缓存、协议开销、消息延迟、可靠性、数
据传输类型,等等。某些协议的交付延迟可能短一些(比如 Server-Sent Events、
WebSocket),但却不能满足其他条件,比如利用浏览器缓存,或者在所有场景下支
持高效的二进制传输(表 14-1)。
浏览器网络概述 | 223