当前位置: 首页 > 网络应用技术

如何实现React的SSR服务器渲染?

时间:2023-03-06 20:05:33 网络应用技术

  当联系next.js框架时,当项目打包和启动时,下一个命令是。入口文件,然后通过NGINX路径访问我们的项目。

  Next.js的Dockerfile格式类似于Node.js服务的格式。从本质上讲,Next.js实际上是节点返回端服务。因此,运行生产环境时,访问开放端口以访问我们的应用程序。

  那么SSR服务器渲染如何,为什么服务器和客户端代码可以同时运行?

  网页的初始版本没有与前后分离,并且通过服务器渲染(与当前服务器的侧面渲染不同)。

  当时,页面渲染可能是这样的。浏览器请求页面URL,然后在服务器收到请求后,转到数据库查询数据,将数据扔到后端 - 端 - 端部组件模板(PHP,ASP,JSP等),然后将其渲染到HTMLFragment,然后将服务器组装成这些HTML片段,形成完整的HTML,最后返回到浏览器

  但是,有明显的缺点,例如这种渲染方法。页面的每个数据,您必须重新要求,检查数据库,然后重新组装HTML。

  后来,出现了Ajax的外观,前端和后端分开。前端首先显示一个没有数据的页面,然后请求数据,然后动态渲染以完成页面显示。在该过程中,仅需要更新网页,只需更新数据的内容。这是一组解决方案。

  因为前端的使用基本上是水疗中心,并且单页表面渲染,所以每个人都发现SEO存在问题,并且随着应用程序的复杂性的增加,JS代码的体积也越来越肿,导致了A第一个屏幕渲染速度的显着下降。

  结果,前端团队使用nodejs来完成服务器端的页面渲染,从而完成服务器渲染。

  浏览器请求URL,根据不同的路由请求服务器的不同数据,然后服务器缝合一个携带数据并返回浏览器的HTML字符串。在同一时间,浏览器执行JS脚本以将相应的事件绑定到该事件到页面的元素,以便页面可以交互。

  服务器渲染的优点和缺点:

  在这里,我们使用以下代码进行模型测试

  打开浏览器的http:// localhost:8080以查看页面的渲染,因此您可以看到,当浏览器获得HTML代码时,您不需要JS,您也可以渲染此页面以渲染此页面。

  1.渲染页面在这里我们用作服务框架

  我们上面使用的方法将内容组件转换为字符串格式的内容。

  但是,每个使用nodejs的人都应该知道节点环境不支持Esmodule和JSX的代码编写,因此我们在此处使用某个转换的帮助。

  在根目录中创建文件

  添加包装和运行命令

  然后,首先运行,此时页面的显示效果并查看源代码

  现在,该页面的基本渲染已完成。可以绑定元素事件吗?我们修改了组件

  刷新页面,单击组件部分,并发现事件不会像我们预期的那样触发。我们添加的事件不绑定到相应的元素。我们的事件已经消失。这表明我们的服务器渲染是不完整的。事件绑定无效。功能不会帮助我们做这一步骤!

  2.此时需要引入事件绑定。如此称为的同质性,流行是在服务器上再次运行的一组React代码,到达浏览器并再次运行。服务器渲染完成页面结构,浏览器和浏览器结束渲染完成事件绑定。

  那么如何让浏览器绑定事件?

  唯一的方法是允许浏览器将JS文件拉动执行并让JS代码控制。换句话说,返回到浏览器的源代码中应该有一个JS文件,其中包含所有事件您的代码。

  那么如何创建此JS文件?

  您需要在这里使用的方法

  首先,为了清晰的思考,我们将所有仅将前一步的文件放入服务器文件夹中,然后创建一个客户文件夹以调用

  接下来,修改我们的WebPack配置,创建一个,编写一般配置

  为包装客户端文件夹创建内容

  创建用于包装服务器文件夹的内容

  在中间修改包装命令:

  接下来,我们需要同时运行这三个命令。在这里,我们使用工具来帮助我们简化:

  然后修改我们的服务器/index.js文件

  将事件绑定到组件

  接下来,使用提供的方法生成public/bundle.js文件,并给出我们的网页以生成一个包含事件绑定的JS文件

  目前,运行,打开http:// localhost:8090/,您可以看到我们的页面内容,单击或内容,可以触发事件,我们添加

  让我们看一下网站的源代码:

  正如我们提前构想的那样,除了页面元素的内容外,还有一个JS文件,其中包含诸如事件绑定之类的代码

  这是我们同质代码过程的摘要,如下图所示

  3.美化代码以美化我们的代码并使用渲染的HTML部分作为使用的函数

  4.服务器渲染中的路由均匀,还必须解决两个末端路由同步的问题,即服务器和浏览器端。

  在这里,我们将再次整理我们的代码,在Root Directory中创建一个页面文件夹,然后在服务器文件夹下方的页面文件夹下方放置我们的先前和组件。目前,我们的根目录就是这样:

  现在我们添加到组件的链接

  然后,在页面目录中,我们创建一个用于存储路由的文件

  请注意,组件字段的组件是以上面的形式引入的,而不是组件的形式,否则将发生此错误:

  修改服务器/index.js的路由参数

  该功能接受参数。根据请求,呈现不同的组件。服务器在这里渲染以帮助我们进行路由匹配。应该注意的是,使用时,需要简化为V5版本

  修改用于生成JS的文件

  此时,请访问http:// localhost:8090/page Display

  事件绑定,没有问题

  点击跳转,事件是绑定的,没有问题

  然后,测试钩子是否可以正常使用

  打开http:// localhost:8090/text,usestate和usestate和使用效率也可以正常使用

  您可以看到,有一个控制台

  根据提示,我们将方法替换为

  再次刷新页面,警告要消除,该功能不是异常

  此时,我们基本上完成了一个简单的React SSR服务器渲染

  原始:https://juejin.cn/post/7096396341940584461