客户端导航 (Client-Side Navigation)

Link 组件支持在同一个 Next.js 应用中的两个页面之间进行客户端导航 (client-side navigation)

客户端导航意味着页面转换是通过 JavaScript 实现的,比浏览器默认的导航方式更快。

以下是一个简单的验证方法:

  • 使用浏览器的开发者工具将 <html> 元素的 background CSS 属性改为 yellow
  • 点击链接在两个页面之间来回切换。
  • 你会看到黄色背景在页面转换过程中保持不变。

这表明浏览器 没有 加载整个页面,客户端导航正在正常工作。

链接示例

如果使用 <a href="…"> 而不是 <Link href="…"> 进行同样的操作,点击链接时背景色会被清除,因为浏览器会执行完整的页面刷新。

代码分割与预加载 (Code splitting and prefetching)

Next.js 会自动进行代码分割,因此每个页面仅加载该页面所需的内容。这意味着在渲染首页时,其他页面的代码最初不会被加载。

这确保了即使你有数百个页面,首页也能快速加载。

仅加载所请求页面的代码还意味着各个页面相互隔离。如果某个页面出现错误,应用程序的其余部分仍能正常工作。

此外,在 Next.js 的生产环境构建中,当 Link 组件出现在浏览器视口时,Next.js 会自动在后台预加载 (prefetch) 链接页面的代码。当你点击链接时,目标页面的代码已经在后台加载完成,页面转换几乎是瞬间完成的!

总结

Next.js 通过代码分割、客户端导航和(生产环境中的)预加载自动优化你的应用以获得最佳性能。

你可以在 pages 目录下创建路由文件,并使用内置的 Link 组件,无需额外的路由库。

你可以在 next/link API 参考文档 中了解更多关于 Link 组件的信息,并在 路由文档 中了解路由的更多内容。

注意: 如果需要链接到 Next.js 应用之外的 外部 页面,直接使用不带 Link<a> 标签即可。