我是React js的新手。以前我使用JSF框架来构建web应用程序。根据我对JSF的了解,实际上是这样做的,从服务器端,它将为相应的JSF标记生成html代码,并将其发送到浏览器并显示它。如果使用JSF 2,相应的前端html部分也可以通过AJAX替换。
我认为我们可以通过React框架完成同样的事情。在react JS中,你可以从服务器端生成客户端html代码,然后通过使用一些Javascript引擎(Nashorn Javascript Engine)在前端渲染。
所以在这两种情况下工作几乎是相同的(从服务器创建的响应)。现在每个人都说React JS是一个高性能框架。有人能解释一下它是如何提供更好的性能的吗?
我再说一遍,我是React JS的新手
我相信性能完全取决于实现,你可以让React和JSF做同样的事情。JSF先于React出现,而且在我看来,React采用了JSF的许多概念。自JSF 1.2以来,React在web模板引擎方面还没有取得任何突破。JSF是一种模板技术,React用Javascript重新创建。
对于移动设备来说,最好一开始就获得完整的HTML以节省电池…React和JSF都可以使用单页应用程序(SPA)来使用Ajax,并且在用户与应用程序交互时仅更新部分DOM。
对于有用户交互的页面,JSF将发送与一个DOM直接交互所需的Javascript,对于React,它将使用它的影子DOM和浏览器DOM。
两者都可以定义自定义UI组件,JSF更快地将呈现的HTML直接发送到客户端,而React将不得不使用客户端计算机cpu来构建它。
我们可以牺牲性能来换取更快的ui,更快地更改ui,软件工程师和脚本人员的薪水。对于任何大规模,我更喜欢JSF,因为在微服务、人工智能、机器学习、Android和其他具有JVM的东西中都有可重用的Java库。对于UI,也许我们可以让脚本人员在React中编写UI,而我们专注于更大的解决方案?
在内部,ReactJS使用一个虚拟DOM,它将被"映射"到"真实" DOM。在React中,您将变量作为state
或props
提供给React组件。React使用一种特殊的算法来检测组件state
或props
的变化,并且只会通过将虚拟DOM与"真实"DOM同步来渲染受影响的部分。
JSF是一个MVC框架,它利用了服务器端呈现并使用了许多标记文件。React是一个库,用于根据SPA (Single Page Application)模型为应用程序构建图形界面。React的优势在于它能够非常快速地更新dom,因为它有一个虚拟dom。最终的应用程序可以放在一个文件中。如前所述,React只是一个库,单独使用它来创建应用程序是没有生产力的。(类似地,JSF只是一个规范,如果没有Rich Faces, Prime Faces, Omni Faces, Boots Faces和3rd parts库,将很难创建应用程序)
在SPA模型中,会话与用户一起存储,后端只是由前端调用的一组服务。第一个身份验证调用产生一个令牌(JWT),该令牌存储在客户端,然后将用于调用服务器的(无状态)REST服务。这就是服务器如何理解它是同一个用户。会话的关键信息存储在客户端,这一事实已经使您理解服务器解除了会话的任务保存所有连接用户的会话。
在实践中,当用户与SPA应用程序交互时,传输的是数据,而不是标记,因为所有或大部分标记已经在客户端上。这意味着在数据传输方面有很大的节省。REST范例使用json来构造要与客户端交换的数据。到达客户端的json对象(Javascript object Notation)是一个表示Javascript对象的字符串,后者提供本地功能将Json字符串转换为Javascript对象,反之亦然。React所要做的就是使用这个对象"到达那个特定的点"。并更新显示的数据而且它做得非常快。
JSF需要在服务器端(作为应用服务器的一部分配置)上存在它自己的和第三方的Java库,因此需要配置时间与只包含javascript文件的React应用程序(一个就足够了)相比,它更高,并且具有严格的可伸缩性。它只需要一个像Nginx这样的web服务器来运行。由于配置减少到零,因此很容易理解最后一种解决方案是多么容易扩展。要扩展,只需在React应用程序中创建一个nginx docker映像,我们就可以从开发pc转移到互联网上的各种云解决方案准备好跨多个按需实例复制我们的映像了。