Next.js | 青训营笔记

120 阅读3分钟

这是我参与 [第五届青训营] 伴学笔记创作活动的第6天

B端应用

内部应用 to Business B端应用;C端应用 to Client

nextjs用于开发b端应用的框架

三种渲染模式

CSR:

客户端渲染(Client-Side Rendering)。常见B端WEB应用开发模式,前后端分离,服务器压力相对更轻,渲染工作在客户端进行,服务器直接返回不加工的 HTML用户在后续访问操作——b端应用给客户端的html直接响应的流不会包含页面中的任何 元素——

SPA:单页面应用,它所需的资源(HTML CSS JS等),在一次请求中就加载完成,不需刷新地动态加载,首屏时间更长

SSR:

SSR(Server-Side Rendering)即服务端渲染。它从服务器端返回页面,不进行前后端分离。传统SSR代码耦合度高,页面逻辑和服务端逻辑混杂,维护成本高——而前端只负责UI和页面切换

同构SSR:前后端一体化,一套代码在服务器上运行一遍,到达浏览器又运行一遍。前端后端都要参与渲染,而且首次渲染出的HTML要一样,客户端与服务端的渲染行为要保持一致,使渲染结构相同

BFF:Backend for Frontend,服务于前端应用的后端。对于大型、复杂的项目,下游服务多,会在接口和模板页面间加入bff层级,会将下游数据汇总、处理,作为前后端的中介,让接口只关注数据

SSG:

静态站点生成,效果上与ssr相同,不同之处在于会将网页所有结果上传到分布cdn上,使网页应用访问一个静态资源。由于只需一次性响应,服务端的压力会减小。但这样会使得所有用户得到相同的服务,无法做到用户个体相关服务。适用于信息展示曝光类的应用。

为什么ssr/ssg?

  • 搜索引擎基于爬虫计算网站展示排名,c端应用需要向互联网搜索引擎展示网页内容,所以需要ssr/ssg响应爬虫请求并渲染网页内容
  • ssr/ssg会在服务端渲染页面,通常较快,不需要请求大量js文件,使得首屏时间更短,提升了用户体验

Next.js

react提供了ssr相关框架,但上手难度较高;为实现同构ssr,还需要大量繁杂且重复的工作,拖慢了开发效率

Next.js构建于Node.js,支持基于React的Web应用程序,上手快、生态好,能使使用者快速掌握前后端一体化开发模式

创建Next.js项目

npx create-next-app@latest --typescript

数据注入

客户端注入

在ssr模式下,页面会在第一次请求中获取数据,将服务端渲染的数据注入到客户端。如果使用 useEffect钩子请求数据,便不是利用服务端渲染注入数据了,这样也会导致浏览器SEO无法获取网页信息。于是Next.js提供了自己的钩子函数用以数据注入

getInitialProps

ssr模式,首次渲染是在服务端渲染,不过使用路由跳转当前页面,会在客户端渲染

getServerSideProps

同样是ssr,不过即使使用router跳转,也会在服务端执行

getStaticProps

是ssg模式,如果涉及路由需要使用 getStaticPaths配置所有可能的情况

总结

为了利于搜索引擎SEO,需要以服务端渲染的形式写应用,服务端渲染需要响应html文档流,并且做到与客户端文档结构同构。而Next.js便是一个上手快、生态良好的编写服务端渲染应用的框架。对于初次学习服务端渲染相关的我来说,Next.js需要学习的仍有很多。关于数据注入、路由处理等等方面需要进一步学习。