我们现在处于未来,因此,当然,我们正在研究通过超越典型方法(例如使页面更精简和像疯狂一样缓存)的奇特新策略来加快网页速度的方法。
一项来自几年前的策略是 InstantClick
在访问者点击链接之前,他们会将鼠标悬停在该链接上。 在这两个事件之间,通常会过去 200 毫秒到 300 毫秒(在此处进行自我测试)。 InstantClick 利用这段时间预加载页面,以便您点击时页面已经存在。
很聪明,但不像现代可以做到的那样先进。 例如,InstantClick 没有考虑到用户可能不想预加载他们没有明确要求的内容,尤其是当他们使用的是速度较慢的网络时。
Addy Osmani 撰写了一份文档,称之为“预测获取”
… 给定一个任意的入口页面,解决方案可以计算出用户访问给定下一个页面或一组页面的可能性,并在用户仍在查看当前页面时为其预取资源。 这有可能提高后续页面访问的页面加载性能,因为页面很有可能已经存在于用户的缓存中。
想象一下:我们可以将分析数据输入到组合中,并让机器学习对其进行分析。 Addy 还指出了其他先前尝试,例如 Gatsby 的 Link 和 一个 WordPress 插件。
另一个竞争者是 Google 的 Quicklink
Quicklink 试图使后续页面的导航加载更快。 它
- 检测视窗内的链接(使用 Intersection Observer)
- 等到浏览器空闲(使用 requestIdleCallback)
- 检查用户是否没有使用慢速连接(使用
navigator.connection.effectiveType
)或启用了数据节省功能(使用navigator.connection.saveData
)- 将 URL 预取到链接(使用
<link rel=prefetch>
或 XHR)。 提供对请求优先级的某些控制(如果支持,可以切换到fetch()
)。
那里没有使用机器学习或分析,但这可能是迄今为止最巧妙的。 我真的很喜欢只在使用可能性足够高时才预取的精神; 无论如何,浏览器都是空闲的,网络可以处理它。
预测获取不会遇到与 instant click 相同的问题吗? 您仍然将资源加载到他们的缓存中,但他们可能不想要,对吧? 看起来这仍然会导致慢速/受限网络上的问题。