最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

为什么说 Next.js 13 是一个颠覆性版本

作者:Shamim Ahmed

  • 2023-02-15
    北京
  • 本文字数:2435 字

    阅读完需:约 8 分钟

为什么说Next.js 13是一个颠覆性版本

Next.js 是一个基于 React(一个用来构建用户界面的流行库)之上而构建的 JavaScript 框架。这意味着你可以使用 React 来构建应用程序,而 Next.js 提供了更多的工具和功能来使这个过程更简单。


Next.js 的主要优点之一是它支持服务器端渲染。这意味着服务器可以为页面生成 HTML 并将它发送到客户端,而不是在客户端使用 JavaScript 生成 HTML。这可以提升性能和应用程序的 SEO(搜索引擎优化)。


Next.js 还包括一些在构建和部署 Web 应用程序时非常有用的其他功能。例如,它具有自动代码拆分功能,应用程序只会加载当前页面所需的代码,而不是一次性加载所有代码。这可以提升应用程序的性能。Next.js 还有一个内置的开发服务器和用来部署应用程序到生产环境的工具链。


通过上面的介绍,你对 Next.js 应该有了更多了解。现在让我们一起看看 Next.js 13 又带来了哪些新功能。


Next.js 13 有哪些新功能?


Next.js 13 是集成 React 的两个身份(UI 库和框架)的第一次全面尝试。那么,它有哪些新功能?


1. 可选的 App 目录用于基于文件的路由


Next.js 最佳特性之一就是基于文件的路由。它可以使用项目目录结构来指定路由,而不是在诸如 react-router 之类的程序中处理复杂的路由设置。通过在目录页中增加入口点,你可以创建一个新路径。


Next.js 13 通过新目录更新了文件路由。可选的 app 目录引入了新的布局结构以及一些新功能和改进。


由于新的路由机制,目录结构发生了微小的变化。路由中的每个路径都有一个包含 page.js 文件的专用目录,这个 page.js 文件是 Next.js 13 中的内容入口点。


路由上的差异



由于采用了新的结构,我们现在可以在每个路径目录中包含其它文件。例如,page.js 针对一个路由:


  • layout.js — 一个路径及其子路径系统。

  • loading.js — 一个基于 React 的即时加载系统。


基于底层机制和 error.js,如果主组件不能加载,则会显示一个异常组件。


我们现在可以在路径目录中定位源文件,因为每个路径就是它的目录。


2. React 服务器端组件


Next.js 新版本中最令人兴奋的就是对 React 服务器端组件的扩展支持。服务器端组件使我们可以在服务器端运行和渲染 React 组件,从而实现更快的交付、更小的 JavaScript 包以及开销更少的客户端渲染。


此外,根据生成路由所需的数据类型,服务器端组件会在构建时或运行时自动缓存来提高性能。


结合服务器端组件和客户端组件,你可以将服务器端组件用于程序中快速加载、非交互性的部分,将客户端组件用于交互、浏览器 API 和其它功能。


在为 Next.js 应用程序构建客户端组件时,你可以在文件顶部使用’use client’指令将其指定为客户端组件。如果你使用了任何第三方包,则可能需要创建一个客户端包装器。


3. 异步组件和数据获取


此外,Next.js 13 引入了异步组件,这是一种为服务器端渲染的组件收集数据的新方案。当使用异步组件时,我们可以通过 async & await 使用 Promises 来渲染系统。


当从返回 Promise 的外部服务或 API 请求数据时,我们将组件声明为 async 并等待响应:


async func getData() {  const res = await fetch ('https://api.shamim.com/...');  return res.json();}
export default async function About() { const name = await getData(); return '...';}
复制代码


下面的例子演示了 Next.js 12 从第三方服务获取数据的方法:



export default function About({data}) { return '...';}
function getServerSideProps(){ // Fetch data from external API const res = await fetch(https://.../data) const data = await res.json()
// Pass data to the page via props return return { props: { data } }}
复制代码


这种方式简化了 API 请求,并且在新版本中非常直观且易于理解。


4. 流式加载


以前,用户可能需要等待生成完整的页面。现在,服务器会在生成 UI 小片段时直接传送给客户端。这意味着较大的片段不会阻碍较小的片段。当然,到目前为止,该功能只支持 app 目录,而且这一点看起来不会改变。


这项新功能给具有强信号网络连接或快速 Wi-Fi 的人所带来的好处比不上给那些弱信号网络连接的人带来的好处。事实上,它们所带来的好处比你想象的要多得多。更快的站点加载时间将提升用户体验,这点是非常棒的。


5. Turbopack


Next.js 13 版本中引入的最后一个重要变化是一个名为 Turbopack 的新 JavaScript 包,它被称为“Webpack 的继任者”。Webpack 是最常用的 JavaScript 构建工具之一,功能强大且可配置,但有时会非常慢且复杂。


Turbopack 是由 Webpack 的创建者开发,用 Rust 创建,其速度有望比最初的 Webpack 快 700 倍(比更现代的替代品 Vite 快 10 倍)。


其他升级

next/image


Next.js 中的新 Image 组件包括更少的客户端 JavaScript、样式和配置,改进了可访问性。在代码层面的变化,next/legacy/image 导入变成了 next/image,next/future/image 导入变成了 next/image。有一个 codemod 可以用来进行快速迁移。


next/font


你可以将 Google Fonts(或者任何其它自定义字体)与 @next/font 一起使用,无需浏览器提交任何查询。除了其它静态资源外,CSS 和字体文件都是在构建时下载。


next/link


这是一种新颖的字体系统,通过提供自动字体优化、集成自定义字体以及所有这些功能无需使用任何外部网络请求,从而提高了效率和隐私。


结论


Next.js 13 无疑包含了几个很酷的功能和显著的更新。但是由于它的很多功能给人感觉是未完成的半成品,所以只能算是一个预览测试版本。甚至最新的 React 中一些尖端功能(这些功能被大量使用但仍处于 RFC 阶段)也经常不包括在内。


虽然我不建议在生产环境中使用 Next.js 13,但你上手应该试一试。


原文链接:

https://blog.bitsrc.io/why-next-js-13-is-a-game-changer-2167658d9de2

相关阅读:

Next.js 13 新的实验性特性,实现 App“动态无限制”

我们如何使用 Next.js 将 React 加载时间缩短 70%

前端食堂技术周刊第 57 期:Turbopack、Next.js13、Chrome107、Vite3.2、图解 TLS 1.3

Next.js 在 Serverless 中从踩坑到破茧重生

2023-02-15 15:1413026

评论

发布
暂无评论
发现更多内容

架构师训练营 - 第二周学习总结

hellohuan

极客大学架构师训练营

JavaScript中删除树形结构数据里的节点

AR7

Java

【喜迎端午】够强大,才够出“粽”,加入InfoQ写作平台,领取节日限定头像标识

InfoQ写作社区官方

写作平台 端午节 热门活动

原创 | TDD工具集:JUnit、AssertJ和Mockito (二十三)编写测试-并行测试

编程道与术

Java 编程 TDD 单元测试 JUnit

第二周作业

LEAF

【week02】总结

chengjing

游戏夜读 | 中国移动游戏简史

game1night

架构师训练营第二周作业

路人

架构师训练营第二周总结

Hanson

架构师第二周课后作业

傻傻的帅

极客大学架构师训练营

「架构师训练营」第 2 周学习总结

guoguo 👻

极客大学架构师训练营

【week02】作业

chengjing

依赖倒置

陈皮

架构师训练营 第二周作业

fujin

极客大学架构师训练营

架构师训练营作业

Hanson

架构师训练营-第2课总结-20200613-软件设计

👑👑merlan

架构总结 软件设计

Spring BeanPostProcessor 你不能不知道的事

CoderLi

Java spring 程序员 源码分析 后端

无抽象不架构

菜根老谭

架构 抽象 架构思维 抽象思维

「架构师训练营」第2周作业 - 设计原则

guoguo 👻

极客大学架构师训练营

第二周总结

LEAF

架构师训练营第二周课后作业

竹森先生

极客大学 极客大学架构师训练营

第二周 - 作业

Happy-Coming

架构第二周-学习总结

J.Smile

极客大学架构师训练营

「架构师训练营」第2周作业

fujin

ioc 极客大学架构师训练营 第二周作业

架构师训练营-W02H-架构设计

赤色闪电

极客大学架构师训练营

架构师训练营-W02S-架构设计

赤色闪电

极客大学架构师训练营

第二章总结

大雄

架构师训练营 No.2 周作业

连增申

第二周总结

Thrine

架构师训练营第二周总结

极客大学架构师训练营

Netty4.x的Channel相关类图及分析

娄江国

为什么说Next.js 13是一个颠覆性版本_大前端_InfoQ精选文章