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

这篇博客文章起源于一个大型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测量页面加载速度,以准确地测量Web上的性能。 该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

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

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

相关文章

JS之 if语句函数 对接事件动作 函数更改css css对接需要换妆的区id或class

if 函数的实现步骤: function 名字() 指定id , 指定开关(display: none or block) if else 构成逻辑 控制开关 决定在哪里安置一个灯泡, 指定一个id给某个标签 把开关用电线连着灯泡, 安装开关 # id名称{ 属性1 赋值, 属性 2 赋值 , 属性3 赋值 } 所有的赋值都可以成为一…

BZOJ - 4520 K远点对

题意:已知平面内 N 个点的坐标,求欧氏距离下的第 K 远点对 维护大小为2k最小堆,KD树的估值用前面提到的做法 PS.网上有人估价是使用边界四个点的最值来独立枚举,然而这样写似乎过不了 #include<bits/stdc.h> #define rep(i,j,k) for(register int ij;i<k;i) #define r…

小型Hadoop集群的Ganglia配置和一些故障排除

Ganglia是一个针对大型集群的开源&#xff0c;可扩展且分布式的监视系统。 它收集&#xff0c;汇总并提供数十种与计算机相关的指标&#xff08;例如CPU&#xff0c;内存&#xff0c;存储&#xff0c;网络使用情况&#xff09;的时序视图。 您可以在UC Berkeley Grid上看到Gang…

linux 命令分号,linux命令之间的分号,, ||

声明、定义 in C&plus;&plus;序 声明和定义是我们使用的基础,但是对于声明和定义的概念,我们不甚了了,也就是说感觉好像是这样,但是真要详细说明就说不上来. 有博主对于声明和定义有以下描述: 1.需要建立存储空间的 ...Java基础之创建窗口——使用流布局管理器…

margin赋值为负值的几种效果(负值像素,负值百分数)

1、margin-top为负值像素 margin-top为负值像素&#xff0c;偏移值相对于自身&#xff0c;其后元素受影响&#xff0c;见如下代码&#xff1a; 1 <!DOCTYPE html>2 <html lang"zh">3 <head>4 <meta charset"UTF-8" />5 &…

代码大全:类

第二部分 创建高质量的代码 第6章 可以工作的类 在计算时代的早期&#xff0c;程序员基于语句来思考编程问题。到了二十世纪七八十年代&#xff0c;程序员开始基于子程序去思考编程。进入二十一世纪&#xff0c;程序员以类为基础思考编程问题。【思考编程的角度有很多&#xff…

Java 8中java.util.function包中的谓词和使用者接口

在我以前的文章中&#xff0c;我写了关于Function接口的内容 &#xff0c;它是java.util.package的一部分。 我还提到了Predicate接口&#xff0c;它是同一包的一部分&#xff0c;在这篇文章中&#xff0c;我将向您展示如何使用Predicate和Consumer接口。 让我们看一下Javadoc …

css之盒子模型

什么是盒子模型&#xff1f; 网页中的任何一个标签都相当于是一个盒子模型&#xff0c;而所有的盒子模型都存在五个必要的属性&#xff1a;width,height,padding,border,margin. 那么在一个网页中如何计算一个盒子模型实际所占的宽度呢&#xff1f;&#xff1f;&#xff1f;&a…

linux伙伴系统算法,Linux伙伴系统(三)--分配

介绍过伙伴系统的原理和伙伴系统的数据结构&#xff0c;现在来看伙伴系统是如何来分配页面的。实际上&#xff0c;伙伴系统分配页面的算法并不复杂&#xff0c;但是由于考虑到分配内存时要尽量减少碎片的产生(涉及迁移机制)以及当内存不足时需要采取各种更为积极的手段&#xf…

Drools Planner重命名为OptaPlanner:宣布www.optaplanner.org

我们很自豪地宣布&#xff0c;从版本6.0.0.Beta1开始&#xff0c;将Drools Planner重命名为OptaPlanner。 我们也很高兴推出其新网站&#xff1a; www.optaplanner.org。 OptaPlanner优化了业务资源的使用。 每个组织都面临计划问题&#xff1a;以有限的有限资源&#xff08;员…

File如何转换成MultipartFile

MutipartFile是spring里面定义的接口&#xff0c;它封装了用户在上传图片时所包含的所有信息&#xff0c;但是有些时候我们要将file转换成MutipartFile&#xff0c;才能在保持原有代码逻辑的情况下方便代码的调整&#xff0c;但是file不能直接转换成MutipartFile&#xff0c;现…

Vue 进阶教程之:详解 v-model

分享 Vue 官网教程上关于 v-model 的讲解不是十分的详细&#xff0c;写这篇文章的目的就是详细的剖析一下&#xff0c; 并介绍 Vue 2.2 v-model改进的地方&#xff0c;然后穿插的再说点 Vue 的小知识。在 Vue 中&#xff0c;有许多方法和 Angular 相似&#xff0c;这主要是因…

linux 无密码登录另一台服务器,ECS Linux服务器ssh免密码登录另外一台服务器的具体设置...

若有多台linux服务器&#xff0c;为方便起见&#xff0c;服务器之前可设置免密码ssh登录&#xff0c;具体操作参考如下所示&#xff1a;1 、登录其中一个服务器&#xff0c;执行ssh-keygen -t rsa&#xff0c;按3次回车&#xff0c;将会生成公钥和私钥文件id_rsa和id_rsa.pub&a…

CSS3 animation-timing-function steps()

animation-timging-function 主要是控制css动画从开始到结束的速度。 linear&#xff1a;线性过渡。等同于贝塞尔曲线(0.0, 0.0, 1.0, 1.0) ease&#xff1a;平滑过渡。等同于贝塞尔曲线(0.25, 0.1, 0.25, 1.0) ease-in&#xff1a;由慢到快。等同于贝塞尔曲线(0.42, 0, 1.0, 1…

在物欲横流,心浮气躁的今天,毕业生靠什么来维持自己的梦想?

在物欲横流&#xff0c;心浮气躁的今天&#xff0c;毕业生靠什么来维持自己的梦想&#xff1f; ①一腔热血的自己 ②愿意帮你“为所欲为”的父亲 ③时刻提醒你要勤俭节约的母亲 ④愿意为你指点迷津的老师 ①是底层架构。不多说&#xff1b;②是物质基础。不管承不承认&#…

概要设计

概要设计说明书 1. 引言 1.1 编写目的 在分析《贪吃蛇游戏的需求分析说明》的基础上&#xff0c;我们对该系统做了概要设计&#xff0c;主要是基于以下目的编写此说明书&#xff1a; 1.对系统概要设计的的阶段任务成果形成文档&#xff0c;以便阶段验收、评审&#xff0c;最终…

Spring 3.2 @ControllerAdvice批注的异常处理

不久前&#xff0c;我写了一个博客&#xff0c;概述了如何将Spring示例代码升级到3.2版&#xff0c;并演示了其中的一些小“陷阱”。 从那以后&#xff0c;我一直在仔细阅读Spring 3.2的新功能列表&#xff0c;尽管它不包含任何革命性的新更改&#xff0c;但我怀疑Spring的家伙…

linux 进程与锁,linux 中的进程与锁

###################################################################################################################第五天###################################进程 所谓进程就是系统中正在执行的程序Permission denied (publickey,gssapi-keyex,gssapi-with-m…

用Java代码列出一个目录下所有的文件

1.File类 File类在java.io.File包中&#xff0c;所以要导入这个包。 File类中用到的方法&#xff1a; boolean isDirectory() 测试此抽象路径名表示的文件是否是个目录 File[] listFiles() 返回一个抽象路径名数组&#xff0c;这些路径名表示此抽象路径名表示的…

Bootstrap概述

前面的话 Bootstrap是简单、灵活的用于搭建WEB页面的HTML、CSS、Javascript的工具集。Bootstrap基于HTML5和CSS3&#xff0c;具有漂亮的设计、友好的学习曲线、卓越的兼容性&#xff0c;还有12列响应式栅格结构&#xff0c;丰富的组件等等。按照官网的宣传来说&#xff0c;Boot…