Eclipse webtools项目(WTP)及其性能/质量

我们公司几年以来一直在使用Eclipse(我们从0.7版本开始使用WTP)

我目前正在用WTP 3.2.3来评估eclipse 3.6.2,它应该用WTP 3.0.4替代Eclipse 3.4.2作为我们的主要IDE。

而且我不得不说,我对表演的担忧再次感到失望:
WTP 3.2.3似乎比3.0.4慢得多。
事实上,我真的好奇,为什么WTP在每个版本上都会变慢。

我们的一个应用程序(dynamicweb项目)包含大约4000个java类和700个jsps / jsp片段 。 我们只需要基本的WTPfunction来开发jsps,xmls和xsd。 我们不需要像Dali这样的高级特性(JPA工具应该真的被webtools项目所覆盖), 天秤座或者一个可视化的xml编辑器 。

另一个有趣的一点是,WTP似乎减慢了整个IDE 。 SWT在几秒钟内不响应,cpu使用率非常高(特别是在构build完成之后 – 如果您查看系统作业,几个jsp / javascript索引器正在工作几分钟,即使所有WTP构buildvalidation器已被禁用),打开新文件比较慢,浏览项目等。

这在旧版本的机器上尤其明显,它只包含一个核心cpu。

最糟糕的是我已经感觉到WTP开发团队不关心性能 (例如看一下http://wiki.eclipse.org/WTP_Performance_Tests页面 – 最后一次更新是在2008年进行的)。

错误报告和新闻组关于基本function的性能(如jsp编辑/validation)的post通常会在一段时间后被忽略或closures,例如: 这里 , 这里 和这里 。

现在,WTP?


请不要误会我的意思:

我不想责怪WTP。
事实上,我相信WTP是一个优秀的开源项目,由一个有才华的团队开发。
但显然, 项目在质量保证方面存在问题 ,特别是在影响可用性和用户接受度的性能方面。

我只想指出,团队应该把重点放在对大多数用户来说至关重要的事情上,然后再着手实现超级function。

我的问题

  • 你对WTP有什么经验,特别是最近的版本?
  • 你能否证实或反驳我的观察?
  • 有更好的select吗?
  • 你从WTP切换到WTP,为什么?
  • 你有没有一些最佳的做法来加快速度,特别是像我们这样的中高档的?

UPDATE

我想就这个问题做一个更新来反映当前的答案,总结当前的结果:

  • 许多用户在相同的问题上或多或less抱怨,所以我看到这些问题确认。
    顺便说一句,这个问题也在服务器上的新闻发布上提到,并附加评论。

  • 负责的WTP项目负责人nitind在WTP的现状方面做了一个显着的职位,我想引用:
    “简单的事实是,我们没有花太多时间在性能testing上,因为我们缺乏这方面的资源。”
    “当然,我们希望积极主动,而不是被动,但我们倾向于首先将时间分配给function性问题。”

所以这个问题变成了一些从社区到WTP团队的公开信:

Dear WTP team, it's obvious that WTP is suffering from major quality/performance issues which you try to play down or to ignore. Please invest some time to improve the current situation at the cost of new features and do everything what's required to solve the current problems. Eg revive the performance team, do some regression tests between previous releases or ask the community for (precise defined) help. I am sure that they are enough people willing and able to help here. If you like, do some kind of poll to get a feeling what should be the most important scopes of future's WTP releases. Please, please, listen to your community. 

作为回应,我是在WTP中提供JSP,XML和JavaScript源代码编辑function的项目的负责人。 简单的事实是,我们没有花太多时间在性能testing上,因为我们缺乏这方面的资源。 当然,我们希望积极主动,而不是被动,但我们倾向于首先将时间分配给function性问题。 我们有一个定期运行性能回归testing的采用者产品,但是我预计testing是在多核心机器上运行的 – 而且我们还没有向我们报告过一段时间的新红旗。

在你连接的3个bug中,有2个比3.0.4版更早,第三个是格式化性能问题(因为已经解决了),或者是针对XML文件的自定义validationtypes在Xerces,iirc引发了内存泄漏,所以我们没有把它放在那个时候)。 如果你有一个具体的项目,你可以附加到一个bug,并说“做X在3.2乘以Y的速度比较慢”,我们将尽我们所能来找出有什么回归。

至于指数,他们至less应该最终完成。 存储在磁盘上的信息在WTP版本之间已经改变,并且这些文件需要被重新处理,以便它们再次被包括在search和(在实施中)重构操作中。 一旦初始索引完成后,它应该逐步采取行动,而且几乎不会引起注意。 您可能遇到的一个体系结构更改是,对于JSP,整个工作空间需要在单个工作台会话中编入索引,以便将该索引视为“最新”。 closuresEclipse的挫折只会延长后处理的影响。

这听起来像你公司的标准安装包括整个WTP,而不是滚动自己的自定义分配。 我build议您检查启动和closures首选项页面,并closures您不感兴趣的任何function的早期启动。 您提到的任何关于使用该设施的兴趣都没有,但是WTP和平台还有其他方面。 在validation首选项页面中,您对validation不感兴趣的任何内容都是公平的游戏,以及默认情况下在Web / JSP文件 / validation首选项页面上validationJSP片段的设置。

我们在这里也有与WTP 3.2.3相同的问题。 我们在产品中也使用了它几年,但是我们的开发人员和客户在这个工具中的接受度正在逐年下降,因为在每个新版本中,它越来越慢。

我想使用它,如果我可以禁用所有“高级”function,但正如你所说,你不能禁用索引器。 如果JSP文件已经在运行,那么您也不能停止validation器(如果您有这么多的文件,并且我们的项目中还有大约1000个JSP文件和许多标记文件,则可以testing这个validation器)。

我也可以certificate,增加记忆并没有帮助。 它只能防止整个月食的崩溃,但不会减lessUI阻塞WTP的内部操作。

在最新的3.2.3版本中,当我从服务器视图中 启动Tomcat时,出现了很多挂起。 用户界面挂了大约1分钟 。 这不仅是我有谁挂了,所有在Windows上工作的同事都有同样的问题。 在Linux上我不知道这个问题。

当您无法访问互联网时,WTP也存在问题。 看来有些注册pipe理机构要求下载模式或类似的东西,如果你没有连接,那么它只是挂起,等待时间。

我不知道是谁的责任:WTP或JBoss工具。 事实是,当我使用GWT(最小的JSP)工作时,我走了相反的道路:完全没有WTP! 我现在使用普通的Eclipse for Java,并使用运行configuration进行部署(以编程方式调用ANT)并启动服务器,而我从来没有回头! Eclipse曾经花费约1.5GB,并坠毁了几次。 现在呢〜800MB左右,整个环境变得更加稳定了。

我已经看到了类似的效果,这里有一个解决scheme可能适用于某些项目环境。

为了保证快速和负责任的Eclipse Web项目环境,请考虑以下事项:

  1. 使用Eclipse IDE进行Java开发
    • 98MB版本比200MB EE版本更精简
    • 从常规/启动和关机,禁用除“Eclipse用户界面”
    • 从validation,禁用validation器,你不需要
    • 这些可能会阻止一些性能问题(YMMW)
  2. 使用docker
    • 你不需要WTP或任何其他插件,它是纯Java
    • 像Tomcat,但非常快速和简单的安装到任何IDE /环境
    • 直接embedded到您的项目文件中,为每个开发人员configuration一次
    • 在任何IDE(Eclipse,IDEA,JDeveloper ..)
    • 以“Debug As”/“Run As”启动Servlet容器
    • 通过在Eclipse控制台上单击红色框来closuresServlet容器
    • IDE控制台,debugging和热代码更换和JRebel工作正常

结果:与使用Eclipse EE版本和WTP的许多其他Eclipse安装相比,快速响应的Eclipse。

为什么? 这可能是因为某些Eclipsefunction或插件包含错误,或者只是简单地使用资源而导致Eclipse UI缓慢。

非Java EE Eclipse甚至可以用于许多Java EE项目环境,这完全取决于您的体系结构以及您正在使用的工具。

下面是一个快速入门教程,以便您希望在Eclipse中尝试使用Jetty Servlet容器。 见https://vaadin.com/web/jani/home/-/blogs/vaadin-for-everyone-how-to-get-started 。 下载VaadinProjectForAnyIDE.zip,这是一个Eclipse项目。 只要忽略Vaadin的东西,用你自己的servletreplaceHelloWorldApplication.java并相应地编辑web.xml即可。

还有一件事。 使用Eclipse EE版本,您可能也希望尝试J2EE预览服务器,它实际上是将Jettyembedded到Eclipse捆绑包中。 但是,这也使用WTP机制。

我也认为Eclipse / WTP的稳定性和性能有些令人担忧。 自从2003年年中以来,我使用Eclipse,自从第一次发布以来,一直在尝试WTP。

起初质量是绝对糟糕的,但对于0.x版本,我当然不能抱怨。 在等待WTP成熟的时候,我使用了MyEclipse,虽然有点不错,但也有缺陷(部分基于WTP,inheritance了一些WTP)。

当MyEclipse变得越来越重,越来越慢,我们遇到了一些稳定性问题,我们切换到“纯WTP”。 我们所使用的只是基本的JSP / JSF编辑器和部署者。

由于WTP不执行增量部署(至less不是用于JBoss服务器运行时),所以我们从JBoss工具中添加了单独的服务器运行时。 当我们采用Facelets时,我们也从JBoss工具切换到了编辑器。

然而,我们遇到了很多MyEclipse的问题。 有无法解释的减速,但更糟的是各种稳定性问题。 有很多尴尬的例外和崩溃。 在我检查的许多不同的工作站上的一个典型的.log文件是exception的chockfull。 我的日志中的最后10个例外的一小部分:

1。

 java.lang.NullPointerException at org.eclipse.jst.jsp.core.internal.validation.JSPActionValidator.isElIgnored(JSPActionValidator.java:147) 

2。

 java.lang.RuntimeException at org.eclipse.jface.viewers.ColumnViewer.checkBusy(ColumnViewer.java:763) 

3。

 java.lang.ArrayIndexOutOfBoundsException: 38 at org.eclipse.debug.internal.ui.viewers.model.FilterTransform$Node.addFilter(FilterTransform.java:67) 

4。

 org.eclipse.jdi.TimeoutException: Timeout occurred while waiting for packet 302111. at org.eclipse.jdi.internal.connect.PacketReceiveManager.getReply(PacketReceiveManager.java:171) 

5。

 java.lang.NullPointerException at org.eclipse.jst.jsf.facelet.core.internal.cm.ElementCMAdapter.getLength(ElementCMAdapter.java:109) 

6。

 Caused by: java.lang.NullPointerException at org.eclipse.jst.jsf.facelet.core.internal.registry.taglib.WebappConfiguration.getConfigFilesFromContextParam(WebappConfiguration.java:184) 

7。

 org.eclipse.emf.ecore.resource.Resource$IOWrappedException: Feature 'span' not found. (file:///mysystem/Eclipse.app/Contents/MacOS/com /sun/faces/metadata/taglib/facelets_jsf_core.taglib.xml, 453, 52) at org.eclipse.emf.ecore.xmi.impl.XMLLoadImpl.handleErrors(XMLLoadImpl.java:83) ... at org.eclipse.jst.jsf.facelet.core.internal.registry.taglib.TagModelLoader.loadFromInputStream(TagModelLoader.java:100) 

8。

 java.lang.NullPointerException: No IModelProvider exists for project P/my_project of version: Utility Module at org.eclipse.jst.j2ee.model.ModelProviderManager.getModelProvider(ModelProviderManager.java:101 

9。

  java.lang.NullPointerException at org.eclipse.jst.j2ee.internal.deployables.J2EEDeployableFactory.clearCache(J2EEDeployableFactory.java:238) 

10。

 org.eclipse.jst.jee.model.internal.mergers.ModelException: java.util.ConcurrentModificationException at org.eclipse.jst.jee.model.internal.mergers.EjbJarMerger.process(EjbJarMerger.java:79) 

请注意,这些只是最后10个,还有很多很多的例外。

偶然的反应是: “你的Eclipse安装被破坏了!你有一个本地的问题! ”是的,我可能有一个本地的问题,但这个“本地问题”似乎普遍,因为我检查的许多Eclipse安装似乎有这个东西在他们的日志。

我也遇到了类似下面的链接报道的部署问题: http : //community.jboss.org/thread/158611它可能是JBoss工具特定的,也可能是基于底层的WTP甚至Eclipse代码。 我不知道,但我知道这是一个讨厌的问题。 每个WTP和JBoss工具版本都有一些固定的东西,每个版本的问题都以一种稍微不同的forms出现。

在稳定性问题之间,我可以完成一些工作,我喜欢编辑提供给我的自动完成和导航function(这使我无法切换到文本编辑器并完全在命令行上编译),但是我确定会爱一些增加的稳定性。

到目前为止,加速我的项目的最好方法是预编译我目前没有使用的代码。 我们有大约20个项目组成了我们的系统,当处理任何特定的问题时,我只接触到那些java文件的特定子集。 编译大部分我不会触及的代码,并把它们放到一些.jar文件中,然后用它作为源代码,而不是包含这些项目,这已经被certificate可以加速很多事情。 我想如果你有4k +文件,它也会帮助你。 每个项目都有一个build.xml文件,这个文件将会包含一个jar文件。

至于JSP编辑的麻木迟钝。 我也有同样的问题,只是太慢了。 我没有超过100个jsp文件,但是我有和你一样的问题。 我的解决办法就是把钱投到硬件上,我必须承认我喜欢这样做:P。

回答以下问题: 您是否有一些最佳实践来加快速度,特别是像我们这样的中高档车型?

在文件保存之后closuresvalidation和自动构build是提高性能的一个好的开始。

由于上面提到的原因,我禁用了WTP JSP编辑器:它只需要太多的资源。 还有一些你应该考虑的事情:

  1. 在普通的HTML编辑器中编辑JSP。 这意味着你没有得到代码完成这是一件好事 。 海事组织,混合Java和HTML是一个错误,编辑无法解决这个问题。 把所有的Java代码放到helper bean中(然后你可以很容易地testing),只需从JSP访问bean。 这应该摆脱99%的所有<% %>标签,并已解决您的大部分问题。

  2. 考虑使用Spring来构build更复杂的bean,并使用这些模式将它们注入到JSP中:

    • 如何将spring bean注入到jsp 2.0 SimpleTag中?
    • 使用SpringBeanAutowiringSupport:

       <%! @Autowired private Bean bean; public void jspInit() { SpringBeanAutowiringSupport .processInjectionBasedOnServletContext( this, getServletContext() ); } %> 
  3. 尝试不同的虚拟机。 WTP编辑器创build了大量的对象,而现在所有的虚拟机(GC实现)都可以很好地处理这些对象。 如果您使用Sun的Java,请尝试使用JRockit或IBM J9 。 也可以使用GC设置。 增加RAM不会有帮助,因为如果你有GC问题,更多的RAM通常只会使情况变得更糟(因为GC将不得不处理更多的数据)。

  4. 预编译尽可能多的代码。 您不需要在工作区上始终打开4000个类。 把你的巨大项目切成可pipe理的块。

  5. 用普通的Java servletreplaceJSP,并使用像rendersnake这样的HTML渲染库,或者使用一种对HTML更好的编程语言(比如Groovy )。

  6. 得到一些体面的硬件。 具有四核和8GB RAM的新PC价格为1000美元。 如果您每天节省十分钟时间,投资将在五十天内支付(一个人的费用总共$ 1000 /天)。

  7. 尝试MyEclipse有更好的网页编辑器。 JSP编辑器比WTP更好(例如,大部分时间代码完成工作),但仍然很慢。

WTP(3.2.3)对我来说也很慢。 我相信我已经find了一些方法,使其不那么慢:

  • 我们使用maven,所以有一个target目录,其中包含所有JSP和其他XML的副本。 我已经认识到他们有时被WTPvalidation人扫描。 但是这不是必须的,所以我已经把它们排除在validation之外(Project / Properties / Validation / XXX / Exclude Group /)。 ( 在将target目录标记为派生时,您应该能够获得相同的效果,但是这对我来说不是有效; – (
  • 我做了(未经科学证实的)观察,对于JSPX来说,WTP似乎比JSP文件更快。

如果您需要准系统Java EE,那么您最好使用Netbeans,如果您需要的只是工作,那么使用IDEA会更好。 它是如此简单。

无法评论,所以我只是把我的意见,以解决这个问题。

你有没有尝试过Eclipse的内存分配,我知道它曾经在我之前在Mac OS X上使用时崩溃。 有一个configuration文件,其中有基本的RAM分配,一旦我修改该文件,并给了它额外的128兆内存,它performance更好。 不知道这是否会影响WTP,我对核心Eclipse应用程序本身的评论更多。