通过预连接,可以提升用户访问体验,并减少服务器性能消耗。本文来自Akamai 网络性能业务部门架构师Utkarsh Goel,他展示了一系列对比测试。LiveVideoStack对本文进行了摘译。
文 / Utkarsh Goel
译 / 王月美
原文 / https://developer.akamai.com/blog/2018/06/25/experiments-with-browser-preconnects/
为什么有此次实验?
现代Web浏览器采用一套性能优化技术来改善用户的体验。预连接提示就是这些优化中的一种,它允许浏览器发现关键主机名,并主动建立连接,以便在不久的将来提供服务请求。在本文中,将讨论Akamai基础架构收集的几个大型数据集和一些实验室内所做的实验,以及从中观察到的通过预连接提示建立的连接的某些特征。此次工作的主要发现是:
当浏览器建立预连接时,连接上的第一个HTTP请求通常会在建立连接后的几百毫秒内发送,因为预连接发生时,请求可能不可用,因此浏览器必须花费时间来分析HTML,并且寻找可以在连接上发送请求的其他资源。
如果连接建立时间和第一个请求发送的时间间隔大于十秒,浏览器将关闭连接,从而失去发送预连接提示的目的。 开发人员必须确保在前10秒内使用预连接提示。
偶然的情况下,预连接可能永远不会用于发送HTTP请求。那该情况下,服务器基础结构上的CPU负载可能会最小。
介绍
现代网页利用数十个主机名来下载数百种资源。对于这些资源中的每一个,浏览器都会对其TCP高速缓存执行快速查找,以检查是否已经存在与相关主机名的连接,以及该连接是否可用。如果TCP连接不可用,浏览器将对其DNS缓存执行查找,以检查相关主机名是否存在DNS条目。如果DNS和TCP条目在缓存中均不可用,浏览器将执行DNS查找并建立新的TCP连接,然后在需要的地方进行TLS握手。当DNS条目和连接尚不可用时,页面加载时间可能会增加,尤其是需要加载位于网页关键路径上的资源时。
为了避免这些预备任务在网页的关键路径上发生,许多Web开发人员使用preconnect 提示,让浏览器执行DNS查找,并在提示可用时立即与主机建立TCP / TLS会话。一个好的Web开发实践会在所请求的主页 HTML的HTTP响应头中发送preconnect提示,例如