Next.js 核心特性与优点

197 阅读3分钟

一、服务端渲染SSR

服务端渲染(Server-Side Rendering)是Next.js的关键特性,要服务端渲染模式下,使用React编写的组件会先在服务器被渲染为HTML后再发送到客户端。因此浏览器加载到的页面已经是完整的,包含所有内容的HTML页面。

对于需要推广的网站,服务端渲染可以提高让搜索引擎爬取完整的内容,提高搜索引擎收录的几率,增加网站的流量。 因为网站首次被访问时,用户需要请求的数据已经在服务端获取完成,所以用户端的首屏加载速度会非常快,原先3秒才能打开的网站,使用服务端渲染后,首屏载入可以优化到1秒内。

二、静态站点生成SSG

静态站点生成(Static Site Generation是 Next.js另外一个重要功能,如果你制作的是内容更新频率不高的网站,那么就需要使用SSG,在pages目录需要使用getStaticProps属性,在app目录不用设置,使用fetch方法获取数据即可,因为fetch有一个默认属性(force-cache)。

网站使用SSG后,一方面可以让服务器不用每次请求都去更新数据,从而减少服务器压力。另一方面,由于用户访问页面前,html已经完整生成,客户端访问的速度也会得到提升。

三、增量静态再生ISR

增量静态再生(Incremental Static Regeneration)是在SSG的基础上增加一个revalidate属性,设置接口的更新频率,让页面的内容在单位时间内动态更新。

示例,设置5分钟更新一次(注意:revalidate的单位是秒,不是毫秒):

await fetch(`/pages/api/test`, { next: { revalidate: 300 } })

因此,ISR适合那些可能会有改动的页面,或者数据规律更新的页面。

四、自动代码分割

Next.js默认会对较大的文件进行代码分割,可以保证用户访问的页面不会加载多余的JavaScript代码。

这样就做到的按需加载,同样提升了页面加载时间,减少用户等待时间。

五、文件系统路由

React和Vue都需要单独维护一个路由表文件,Next.js则不需要,直接使用文件系统路由,例如pages/test.js会生成一个/test路径,自动完成路由配置。

当系统越来越复杂时,开发人员再也不需要去路由表中配置,直接新建文件即可完成路由的新增。

六、API路由

Next.js还提供了另外一种生成路由的方式,在pages/api目录中创建API路由,每一个API文件可以是一个独立的API。

一般创建接口可以使用这种方式。

七、热更新

热更新也是Next.js提供的默认功能,在文件或React组件更新时,浏览器会在1秒内重新加载,从而提升开发效率。

八、TypeScript支持

考虑到越来越多的人开始使用TypeScript,Next.js默认就支持TypeScript,可以直接在项目中使用TypeScript,不再需要额外的配置。

TypeScript可以在大型项目中避免出现隐藏的类型错误,让代码更健壮。

九、图片优化

图片的加载一直都是难题,Next.js提供了next/image组件,使用图片标签时可以直接使用。会自动优化图片,自动压缩,转换图片为WebP格式,延迟加载较大的图片。

示例:

import Image from 'next/image';
export default function Page() {
    return (
    <Image src="/test.png" width={200} height={200} alt="info"
    />
)};

十、部署

可以使用Vercel将next.js创建的项目直接部署到云端,并且是免费的,当然也支持部署到其它云平台如AWS,Cloudflare,Nelify等。