我还没有找到一个很好的JSF性能基准。我知道你在想什么,这取决于你的代码/设计/数据库设置等。我知道在你需要优化你的表示层之前你必须优化很多东西(例如,你应该看看你的数据库模式有多好),但是为了讨论的缘故,让我们说我们已经达到了必须检查我们的表示层的地步。
JSF是会话密集型的。我多次读到,在编写可伸缩应用程序时,这可能是一个缺点。在集群环境中拥有大的用户会话可能会有问题。有这方面的文章吗?我不愿意看到JSF生命周期和CDI集成在性能上付出巨大的代价。为了获得高性能,无论框架或语言如何,都必须实现会话粘性。怎么做取决于你的设置;例如,硬件负载平衡器通常具有此功能。这样你就不用担心服务器间的网络延迟了。
然而,单机上的JSF+CDI性能也非常重要。假设开销是300ms,这意味着一个4核服务器每秒只能处理10个请求。不算太坏,但不是高性能的。(通常对JEE的公司来说不是问题;它们通常是企业级的,而不是互联网级的;而且他们有足够的钱来购买大量的服务器)
我没有真正的性能数字;如果有人报告一些CDI+JSF统计数据,例如,处理一个中等大小表单的典型页面需要多长时间,这将是很有趣的。
我不知道JSF非常依赖会话数据的说法是否正确。然而,我认为解决由大量会话数据引起的可伸缩性问题的方法是:
-
复制前端服务器(无论如何都要超过某个扩展点),并且
-
根据会话令牌将请求分发到前端,因此会话数据可能已经在内存中可用。
表示层是->令人尴尬的并行应用程序的一个实例。原则上,你可以通过添加硬件来扩展它;一种极端的情况是,在站点的最大用户数的一分钟内,每个用户有一个超线程。所以可扩展性在这里不是问题。可能出现的问题是,即使在单用户模式下,必须按顺序呈现的页面也需要很长时间才能呈现:如果您的JSF在单用户模式下需要一分钟才能呈现,那么在多用户模式下也会如此,如果您不能并行地呈现多个部分,那么这是必要的。