jsf tree组件_JSF:在传统组件和时尚性能杀手之间进行选择

jsf tree组件

这篇博客文章起源于一个大型Web应用程序中的性能问题。 每个人都优化Java代码,但似乎没有人尝试优化JavaScript代码。 奇怪,因为在客户端有很多改进的空间。 我会说,甚至比服务器端还要多。 我们将分析可编辑的JSF标准组件(有时称为“旧版”)和具有丰富JavaScript小部件的现代PrimeFaces组件的性能。 这是中立的分析,不能怪任何图书馆或任何人。 只有事实。

好。 我们要测试什么? 目标是评估PrimeFaces的JS脚本块执行的客户端性能(无后端逻辑)
p:inputText / p:selectOneMenu。 我们想用输入/测试一个可编辑的p:dataTable
选择表单元格中的组件。 该表有25行和16列,表示25 * 16 = 400个单元格。 每个单元格都包含输入或选择组件。 有6个测试用例。 标准的h:inputText和h:selectOneMenu没有JS脚本块,因此有趣的是看看JS小部件有什么影响。

整个测试项目可在GitHub上找到 。 简单克隆或下载它,然后使用内置的Maven Jetty插件运行。 页面加载速度是通过新的Navigation Timing JavaScript API进行测量的,以准确地测量网络性能。 该API提供了一种获取准确而详细的时序统计信息的简单方法。 比使用JS Date对象更精确。 导航定时JavaScript API在Internet Explorer 9和更高版本以及最新版本的Google Chrome和Firefox中可用。 在GitHub上显示了用于测量从当前响应到达到触发窗口onload事件为止的时间的代码。

JavaScript是单线程的,因此让我们看看顺序脚本块的执行如何减慢显示网页的速度。 如果我们只测试
h:inputText和p:inputText,差别很小。 页面加载时间几乎相同。 在Windows 7和Firefox 20.0.1上运行,我只能看到带有p:inputText的表需要ca。 比使用h:inputText的表多200-300 ms。 这是一个很好的结果,这意味着一个p:inputText的JS脚本执行时间不到1毫秒。 真的很好 恭喜PrimeFaces。 使用输入和选择进行的混合测试显示,带有PrimeFaces组件的页面大约需要1.5 sek。 不只是包含标准组件的页面。 添加更多PrimeFaces选择组件会降低页面渲染时间。 极端的情况是只有p:selectOneMenu组件。 这是性能杀手,也是我们的Web应用程序太慢的原因。 Internet Explorer显示众所周知的错误消息“此页面上的脚本导致Internet Explorer运行缓慢”。 看一下页面加载时间本身。

h:selectOneMenu

p:selectOneMenu

如果我们假设组件渲染器花费大约相同的时间来渲染HTML输出,则可以计算单个p:selectOneMenu的JS脚本块执行时间。 这个时间是11.3毫秒。 这太多了。 原因可能是窗口小部件的构造函数中有许多效率低下的jQuery选择器。 我不知道,在这里也没关系。 在装有Ubuntu的笔记本上,我的时差很大。 10瑞典克朗。 具有400个p:selectOneMenu标签的浏览器几乎“冻结”。

h:selectOneMenu


p:selectOneMenu

结论

有人说“ JSF很慢,JSF不是正确的技术”。 错误。 JSF足够快。 这取决于如何使用此框架。 一次编辑所有内容都很不错,但是显然不建议使用带有丰富JSF组件的大型可编辑DataTable。 什么是可编辑DataTable的替代方案? 有多种方法,具体取决于个人喜好。 我将尝试提出一些建议。

  1. 在大型可编辑表中使用标准JSF选择组件。 但是主题是什么? 没问题。 所有现代浏览器(包括IE8或更高版本)都允许设置本机HTML选择元素的样式。 您可以调整边框,背景的颜色,并根据所应用的主题让选择看起来或多或少时尚。 当然前提是前提是,您不需要高级功能,例如选定组件中的自定义内容(过滤器功能或其他功能)。
  2. PrimeFaces中的单元格编辑功能可呈现本机选择元素,并且速度很快。
  3. PrimeFaces中的行编辑功能可呈现本机选择元素,而且看起来也很快。
  4. 在一个视图中使用主从方法。 您选择一行并查看要编辑的详细信息。 详细信息可以显示在表格的外部–在右侧或顶部,具体取决于表格的宽度/高度。
  5. 具有不同视图的主从方法。 您选择一行并切换视图。 您可以在PrimeFaces Extensions的MasterDetail组件中看到详细信息,而不是表格。 您可以从详细信息转到其他级别来创建/编辑更多详细信息,然后最后再次跳至概览表。

参考: JSF:我们的JCG合作伙伴 Oleg Varaksin在“ 软件开发思想”上的 遗留组件和时尚性能杀手之间进行选择 。

翻译自: https://www.javacodegeeks.com/2013/05/jsf-choice-between-legacy-components-and-fashionable-performance-killers.html

jsf tree组件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/349003.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java耗时操作阻塞_spring boot高并发下耗时操作的实现方法

高并发下的耗时操作高并发下,就是请求在一个时间点比较多时,很多写的请求打过来时,你的服务器承受很大的压力,当你的一个请求处理时间长时,这些请求将会把你的服务器线程耗尽,即你的主线程池里的线程将不会…

如何在Java中转义JSON字符串-Eclipse IDE技巧

在Java应用程序中工作或进行JSON解析时,通常很常见的做法是从某些资源(例如RESTful Web服务)中复制粘贴JSON字符串,然后使用Jackson库解析JSON。 这是测试和学习Java中解析JSON字符串的最快方法,但是这种方法的主要问题…

java hashmap实例_java HashMap详解及实例代码

java hashmap/** map集合的特点* 将键映射值的对象,一个映射不能包含重复的值;每个键最多只能映射到一个值** map集合和collection集合的区别?* map集合存储元素是成对出现的,map集合的键是唯一的,就是可重复的。可以把…

spring javafx_带有Spring的JavaFX 2

spring javafx我将从一个大胆的声明开始:我一直很喜欢Java Swing或applet。 在那里,我说了。 如果我进行一些自我分析,那么这种钦佩可能是在我接触Java时开始的。 Swing(实际上)是我使用Java所做的第一件事&#xff0c…

jframe和mysql登陆_刚写的一个从数据库读取账户和密码进行登陆的小程序~高手请无~...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.sql.Connection;import java.sql.DriverManager;import java.sql.*; import javax.swing.*;public class LoginSystem extends JFrame{publi…

使用WebCrypto API的电子签名

有时我们需要让用户进行电子签名。 通常,人们会理解为将您的手写签名以某种方式放在屏幕上。 根据管辖范围,可能很好,或者仅存储图像可能还不够。 例如,在欧洲,有910/2014号法规 ,该法规定义了什么是电子签…

mycat mysql 物理部署_一、MyCat的搭建

一、什么是mycat简单直接点就是,MyCat其实就是一个数据库的中间件!一般我们都是app直接到数据库!有了MyCat以后,就是app到MyCat然后再访问数据库。mycat是个中间件,它负责连接管理mysql,应用程序连接mycat,把mycat当作…

java 记事本换行_[求助]记事本自动换行

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼我编的一个记事本 自动换行该如何实现import java.io.*;import java.awt.*;import java.awt.event.*;import java.awt.print.*;public class Jishiben extends Frame implements ActionListener{FileDialog fileDlg;String str, f…

JAVA中的适配器应用_Java适配器模式应用之电源适配器功能详解

本文实例讲述了Java适配器模式应用之电源适配器功能。分享给大家供大家参考,具体如下:一、模式定义存在两种适配器模式1 对象适配器模式,在这种适配器模式中,适配器容纳一个它包裹的类对象的物理实体。2 类适配器模式,…

java.util接口_函数接口– Java 8中java.util.function包中的函数接口

java.util接口我以前写过有关功能接口及其用法的文章。 如果您正在探索要成为Java 8一部分的API,尤其是那些支持lambda表达式的API,您会发现很少的接口,例如Function,Supplier,Consumer,Predicate和其他接口…

java new string作用_java中直接new String对象?

首先明确一点,在Java中比较的是两个对象的地址,equals()比较的是两个对象的值,如果使用equals()来替换,则两个输出结果都为true。言归正传,为什么第一个返回为false?先看一下intern()这个方法的描述&#x…

Apache Camel中的短重试与长重试

《骆驼设计模式》一书介绍了20种模式以及用于设计基于Apache Camel的集成解决方案的众多技巧和最佳实践。 每个模式都基于真实的用例,并提供了Camel特定的实现细节和最佳实践。 为了让您有这本书的感觉,以下是该书的重试模式摘录,其中介绍了如…

java注解的继承_Java注解合并,注解继承

spring中有时候一个类上面标记很多注解。实际上Java注解可以进行继承(也就是把多个注解合并成1个)比如说SpringMVC的注解RestControllerRequestMapping("/person")可以合并为一个PathRestController("/user")实现是:import java.lang.annotatio…

java实现驾校考试系统_jsp驾校考试系统

本驾校考试系统采用了Browser/Server体系结构,JSP(Java Server Page)作为前台开发工具,MySQL作为后台数据库进行开发。最终系统实现的系统将分为管理员和学员两个角色,其中系统管理员部分的主要功能包括修改登录密码、学员信息管理、科目1题目…

Java Maven和Gradle构建的主题缓存

Concourse CI 3.3.x引入了在任务运行之间缓存路径的功能。 此功能有助于加快将内容缓存在特定文件夹中的任务-在这里,我将演示如何使用此功能来加快基于Maven和Gradle的Java构建。 我在这篇文章中使用的代码和管道可以在我的github仓库中找到 – https://github.co…

java qlv转mp4 代码_怎么将qlv格式转换成mp4?教你快速转换视频格式的技巧

如何将qlv格式转换成mp4?众所周知qlv格式是腾讯视频的下载格式,而qlv格式的特点在于不能用别的播放器打开。如果用腾讯视频以外的播放器打开则需要将qlv格式转换成mp4,那你知道将qlv格式转换成mp4的技巧吗?下面小编教你一种转换qlv格式的技巧…

mysql导入竖杠分割的数据_MYSQL :逗号分隔串表,分解成竖表

DROP TEMPORARY TABLE IF EXISTS Temp_Num ;CREATE TEMPORARY TABLE Temp_Num ( xh INT PRIMARY KEY ); -- 创建数字辅助表SET i 0;INSERT INTO Temp_Num(xh) -- 写入数字辅助表SELECT i : i1FROM AdDataCenter.Ad_Targeting_Mobisage aLIMIT 0, 100 ;SELECT b.AdGroupID , SU…

maven 父maven_Maven的春天

maven 父maven1.概述 本教程将讨论如何使用Maven设置Spring,并介绍使用Spring依赖项的特定用例。 最新的Spring版本可以在Maven Central中找到。 2.基本的Maven Spring依赖关系 Spring的设计具有模块化和灵活性–基本的Spring容器可用于多种情况,而无需…

java中cell无法输出_java – iText 5.5.3 PDFPCell:长文本不适合单元格(不正确地包装文本)...

我正在尝试创建一个包含表格的波斯语PDF,我想写入它.当我的字符串很长时,它不能正确地适合单元格.感觉像字符串填充单元格颠倒!…我的意思是,例如,当我想写“你好我的朋友.什么事情?”在单元格中输出如下:|这是怎么回事? ||我的朋…

emc存储java打开后报错_连接EMC存储系统 - osc_mk8rqvg4的个人空间 - OSCHINA - 中文开源技术交流社区...

1.准备一台笔记本电脑,一根网线即可。2.将网线一头连接笔记本电脑,另一头连接存储。(连接存储的一头应连接到有扳手图标的那一网口上)3.配置IP地址IP:128.221.1.254子网掩码:255.255.255.04.ping 128.221.1.250看是否能ping通&…