预取如何在Next.js应用程序中工作
在用Next.js链接2个页面时,我提到了如何使用Link Next.js组件来创建2个页面之间的链接,当你使用它时,Next.js为我们透明地处理前端路由,所以当用户点击一个链接时,前端会负责显示新的页面,而不会像通常发生在网页上那样触发一个新的客户端/服务器请求和响应周期。
当你使用Link 时,Next.js 还会为你做另一件事。
只要包裹在<Link> 中的元素出现在视口中(这意味着网站用户可以看到它),Next.js就会预取它所指向的URL,只要它是一个本地链接(在你的网站上),就会使应用程序对浏览者来说超级快速。
这种行为只有在生产模式下才会被触发(我们稍后会深入讨论这个问题),这意味着如果你用npm run dev ,就必须停止应用程序,用npm run build 来编译你的生产包,而用npm run start 来运行它。
使用DevTools中的Network inspector,你会注意到在页面加载时,折叠上方的任何链接在load 事件被触发后就开始预取(当页面完全加载时被触发,发生在DOMContentLoaded 事件之后)。
任何不在视口中的其他Link 标签将在用户滚动时被预取,它
预取在高速连接(Wifi和3g+连接)上是自动的,除非浏览器发送Save-Data HTTP头。
你可以通过设置prefetch 道具为false ,选择不预取单个Link 实例。
<Link href="/a-link" prefetch={false}>
<a>A link</a>
</Link>