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

时间:2011-03-25 14:44:03

标签: java eclipse jsp ide eclipse-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会变慢。

我们的一个应用程序(动态Web项目)包含 4000个java类和700个jsps / jsp片段。我们只需要基本的WTP功能来开发jsps,xmls和xsd。我们不需要高级功能,例如Dali(JPA工具是否真的涵盖了 webtools项目?),Libravisual xml editor首先点。

另一个有趣的观点是WTP似乎放慢了整个IDE 。 SWT在几秒钟内是非反应性的,cpu使用率非常高(特别是在构建发生之后 - 如果你查看系统作业,几个jsp / javascript索引器正在工作几分钟,即使所有WTP构建验证器已被禁用),打开新文件的速度较慢,在项目中导航等。

在只包含一个核心CPU的旧机器上尤其如此。

最糟糕的是,我觉得WTP开发团队并不关心性能 (例如,查看http://wiki.eclipse.org/WTP_Performance_Tests页面 - 上次更新发生在2008年)。

有关基本功能(例如jsp编辑/验证)性能的错误报告和新闻组帖子经常会在一段时间后被忽略或关闭,例如:herehereand here

Quo vadis, WTP?


请不要误会我的意思

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

我只想指出,团队应该首先关注那些对大多数用户来说非常重要的事情,然后再开始实施超级功能。

我的问题

  • 您对WTP的体验有哪些,尤其是最新版本?
  • 你能证实或反驳我的意见吗?
  • 有更好的选择吗?
  • 您是否从WTP切换到了WTP?为什么?
  • 你是否有一些最好的做法来加快速度,特别是像我们这样的中上层?

更新

我想对此问题进行更新,以反映当前的答案和 总结当前的结果:

  • 许多用户或多或少地抱怨同样的问题,所以我认为这些问题已得到确认 顺便说一句,这个问题也在 theserverside.com 上的新闻帖中提及,附加评论。

  • 负责任的WTP项目负责人,nitind,就WTP的现状发表了一篇值得注意的文章,我想引用: “简单的事实是,我们不会在性能测试上花费太多时间,因为我们缺乏这样做的资源。”
    “我们当然希望积极主动而不是反应,但我们倾向于首先将时间分配给功能性问题。”

所以这个问题变成了一些社区对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.
E.g. 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.

11 个答案:

答案 0 :(得分:32)

为了回应,我是在WTP中提供JSP,XML和JavaScript源编辑功能的项目的负责人。一个简单的事实是,我们不会花太多时间在性能测试上,因为我们缺乏这样做的资源。当然,我们希望积极主动而不是反应,但我们倾向于首先将时间分配给功能性问题。我们确实有一个定期运行性能回归测试的采用者产品,但我希望现在测试是在多核机器上运行的 - 我们还没有在一段时间内向我们报告任何新的危险信号。

在您链接的3个错误中,2个早于您赞美的3.0.4版本,第三个是格式化性能问题(由于已解决)或者是一个特定于XML文件的类型验证(修复这会引发Xerces,iirc中的内存泄漏,因此我们当时没有把它放进去)。如果你有一些具体的项目,你可以附加到一个错误并说“做X在3.2的Y量较慢”,我们将尽我们所能来找出哪里有一个回归。

对于索引器,它们至少应该最终完成。存储的磁盘信息在WTP版本之间发生了变化,这些文件需要重新处理,因此它们会再次包含在搜索和(实施时)重构操作中。一旦初始索引完成,它应该逐步行动并且几乎不明显。您可能遇到的一个体系结构更改是,对于JSP,整个工作区需要在单个工作台会话中编入索引,以使该索引被视为“最新”。将Eclipse从失败状态中关闭只会延长再处理的影响。

听起来贵公司的标准安装包括整个WTP而不是滚动您自己的自定义发行版。我建议您检查启动和关闭首选项页面,并关闭您不想使用的任何功能的早期启动。你提到的任何事情都没有利用这个设施,但是WTP和平台还有其他领域。您对验证不感兴趣的是验证首选项页面上的公平游戏,以及默认情况下在 Web / JSP上验证JSP片段的设置文件 / 验证首选项页。

答案 1 :(得分:5)

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

如果我可以禁用所有“高级”功能,我想使用它,但正如您所提到的,您根本无法禁用索引器。如果JSP文件已经运行,你也无法停止它的验证器(你可以测试这个,如果你拥有那么多文件,我们在项目中也有大约1000个JSP文件和许多标记文件)。

我也可以证明增加内存并没有帮助。它只能防止整个日食的崩溃,但它不会减少阻止WTP内部操作的UI。

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

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

答案 2 :(得分:4)

我不知道应该责怪谁:WTP或JBoss工具。 事实是,当我使用GWT(最小JSP)时,我采取了相反的方式:完全没有WTP!我现在使用普通的Eclipse for Java,并使用运行配置来部署(以编程方式调用ANT)并启动服务器,我从未回头! Eclipse过去需要大约1.5GB并且多次崩溃。现在,它大约800MB,整个环境变得更加稳定。

答案 3 :(得分:4)

我见过类似的效果,这里有一个可能适合某些项目环境的解决方案......

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

  1. 将Eclipse IDE用于Java开发人员
    • 98MB版本比200MB EE版本更精简
    • 来自General / Startup and Shutdown,禁用“Eclipse UI”以外的所有内容
    • 来自验证,禁用您不需要的验证器
    • 这些可能可以防止出现一些性能问题(YMMW)
  2. 使用Jetty
    • 你不需要WTP或任何其他插件,它是纯Java
    • 喜欢Tomcat,但速度非常快易于安装到任何IDE /环境中
    • 直接嵌入到您的项目文件中,为每个开发人员配置一次
    • 适用于任何IDE(Eclipse,IDEA,JDeveloper ..)
    • 使用“Debug As”/“Run As”启动Servlet容器
    • 单击Eclipse控制台上的红色框
    • 关闭Servlet容器
    • IDE控制台,调试&热代码替换& JRebel工作正常
  3. 结果:快速&与使用带有WTP内容的Eclipse EE版本的许多其他Eclipse安装相比,响应式Eclipse。

    为什么呢?可能是某些Eclipse功能或插件包含错误或仅仅以错误的方式使用资源,这使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的东西,用你自己的servlet替换HelloWorldApplication.java并相应地编辑web.xml。

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

答案 4 :(得分:2)

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

起初质量非常糟糕,但对于0.x版本,我当然不能抱怨。在等待WTP成熟的同时,我使用了MyEclipse,这有点好,但也有其缺陷(部分基于WTP,继承了一些WTP)。

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

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

然而,我们遇到了许多与MyEclipse有关的问题。有无法解释的减速,但更糟糕的是各种稳定性问题。有很多尴尬的例外和崩溃。我检查过的许多不同工作站上的典型.log文件都是例外情况。我日志中最后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安装已损坏!您有本地问题!”是的,我可能有本地问题,但这个“本地问题”似乎很普遍我检查的安装似乎在他们的日志中有这些东西。

我也遇到过各种形式的部署问题,例如以下链接报告:http://community.jboss.org/thread/158611它可能是特定于JBoss工具的,也可能是基于底层WTP甚至是Eclipse代码。我不知道,但我知道这是一个令人讨厌的问题。每个WTP和JBoss工具版本都有“东西”固定,每个版本的问题都会以稍微不同的形式重现。

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

答案 5 :(得分:1)

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

至于JSP编辑中的麻木慢。我有同样的问题,它只是如此缓慢。我没有超过100个jsp文件,但我遇到了与你相同的问题。我的解决方案就是向硬件投钱,我必须承认我喜欢这样做:P。

答案 6 :(得分:1)

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

在保存文件后关闭验证和自动构建是提高性能的良好开端。

答案 7 :(得分:1)

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

  1. 在普通的HTML编辑器中编辑JSP。这意味着你没有得到代码完成这是一件好事。 IMO,混合Java和HTML首先是一个错误,编辑无法解决这个问题。将所有Java代码放入帮助bean(然后可以轻松测试),并从JSP访问bean。这应该摆脱所有<% %>标签的99%,并且已经解决了大部分问题。

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

  3. 尝试使用其他VM。 WTP编辑器创建了大量的对象,现在所有的VM(GC实现)都可以很好地处理它们。如果您使用Sun的Java,请尝试JRockitIBMs J9。同时使用GC设置。增加RAM无济于事,因为如果你有GC问题,更多RAM通常只会使情况变得更糟(因为GC必须处理更多数据)。

  4. 预编译尽可能多的代码。在工作区中,您不需要一直打开4000个类。将您的庞大项目切割成易于管理的块。

  5. 用普通的Java servlet替换JSP并使用像rendersnake这样的HTML呈现库,或者使用一种与HTML相比更好的编程语言(如Groovy)。

  6. 获得一些不错的硬件。配备四核和8GB RAM的新PC售价1000美元。如果您每天节省十分钟,投资将在50天内支付(按1人的费率计算,每天1000美元/天)。

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

答案 8 :(得分:1)

WTP(3.2.3)对我来说也很慢。我相信我找到了一些让它不那么慢的方法:

  • 我们使用maven,因此有一个target目录,其中包含所有JSP和其他XML的副本。我已经认识到它们有时会被WTP验证器扫描。但这不是必需的,所以我将它们排除在验证之外(项目/属性/验证/ XXX /排除组/)。 (在将target目录标记为派生时,您应该能够获得相同的效果,但这对我来说不起作用; - (
  • 我已经做了(未经过科学证明)的观察,使用JSPX的WTP似乎比JSP文件更快。

答案 9 :(得分:1)

如果您需要准系统Java EE,那么您最好使用Netbeans,如果您需要一切,但只是工作,您最好使用IDEA。就这么简单。

答案 10 :(得分:0)

无法发表评论,所以我会将评论放在这个答案中。

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