54

我们公司几年来一直在使用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 项目覆盖吗?)、Libra可视化 xml 编辑器这样的高级功能。

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

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

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

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

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.
4

11 回答 11

32

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

在您链接到的 3 个错误中,2 个早于您称赞的 3.0.4 版本,第三个是格式化性能问题(自已解决)或一个具有特定于 XML 文件的 as-you-type 验证(其修复将在 Xerces iirc 中触发了内存泄漏,因此我们当时没有将其放入)。如果您有可以附加到错误的具体项目并说“在 3.2 中执行 X 的速度要慢 Y 量”,我们将尽我们所能找出存在回归的地方。

至于索引器,它们至少应该最终完成。存储的磁盘信息在 WTP 版本之间发生了变化,这些文件需要重新处理,以便它们再次包含在搜索和(在实施的情况下)重构操作中。一旦初始索引完成,它应该会逐渐增加并且几乎不会被注意到。您可能遇到的一种架构变化是,对于 JSP,整个工作空间需要在单个工作台会话中进行索引,以便将该索引视为“最新的”。出于沮丧而关闭 Eclipse 只会延长重新处理的影响。

听起来您公司的标准安装包括整个 WTP,而不是滚动您自己的自定义分发。我敦促您检查启动和关闭首选项页面,并关闭您不感兴趣的任何功能的提前启动。您提到的没有任何兴趣使用该工具,但是 WTP 和平台的其他领域可以使用。您对验证不感兴趣的任何内容都是验证首选项页面上的公平游戏,以及默认情况下在Web / JSP 文件/验证首选项页面上验证 JSP 片段的设置。

于 2011-03-29T17:18:35.780 回答
5

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

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

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

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

当您无法访问互联网时,WTP 也会出现问题。似乎有些注册表要求下载模式或此类内容,如果您没有连接,那么它只会挂起并等待超时。

于 2011-03-28T08:06:19.490 回答
4

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

于 2011-03-30T16:25:46.953 回答
4

我已经看到了类似的效果,这是一种可能适用于某些项目环境的解决方案...

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

  1. 为 Java 开发人员使用 Eclipse IDE
    • 98MB 版本比 200MB EE 版本更精简
    • 从 General / Startup and Shutdown,禁用除“Eclipse UI”之外的所有内容
    • 从验证,禁用你不需要的验证器
    • 这些可能会防止一些性能问题(YMMW)
  2. 使用码头
    • 您不需要 WTP 或任何其他插件,它是纯 Java
    • 像 Tomcat,但安装到任何 IDE/环境中都非常快速和简单
    • 直接嵌入到您的项目文件中,为每个开发人员配置一次
    • 适用于任何 IDE(Eclipse、IDEA、JDeveloper..)
    • 使用“Debug As”/“Run As”启动 Servlet 容器
    • 通过单击 Eclipse 控制台上的红色框关闭 Servlet Container
    • IDE 控制台、调试和热代码替换和 JRebel 工作正常

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

为什么?可能是某些 Eclipse 功能或插件包含错误或只是以不良方式使用资源,这使得 Eclipse UI 迟缓。

即使对于许多 Java EE 项目环境,非 Java EE Eclipse 也足够好,这完全取决于您的体系结构和您使用的工具。

如果您想在 Eclipse 中试用 Jetty Servlet Container,这里有一个快速入门教程。请参阅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 预览服务器,它实际上是嵌入到 Eclipse 包中的 Jetty。但是,这也使用了 WTP 机制。

于 2011-04-04T10:37:57.280 回答
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 安装已损坏!您有一个本地问题! ”是的,我可能有一个本地问题,但是这个“本地问题”似乎很普遍,因为我检查过的许多 Eclipse 安装似乎在他们的日志。

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

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

于 2011-04-01T18:47:56.687 回答
1

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

至于在 JSP 编辑中头脑麻木的慢。我也有同样的问题,就是太慢了。我没有超过 100 个 jsp 文件,但我和你有同样的问题。我的解决方案就是在硬件上砸钱,我必须承认我喜欢这样做:P。

于 2011-03-28T21:29:35.550 回答
1

要回答以下问题: 您是否有一些最佳实践来加快速度,尤其是对于像我们这样的中上型企业?

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

于 2011-03-31T07:40:54.617 回答
1

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

  1. 在普通的 HTML 编辑器中编辑 JSP。这意味着您不会获得代码完成,这是一件好事。IMO,将 Java 和 HTML 混合首先是一个错误,编辑器无法修复它。将所有 Java 代码放入帮助程序 bean(然后您可以轻松地对其进行测试),然后从 JSP 中访问这些 bean。这应该可以消除 99% 的所有<% %>标签,并已经解决了您的大部分问题。

  2. 考虑使用 Spring 来构建更复杂的 bean 并使用以下模式将它们注入到您的 JSP 中:

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

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

  4. 预编译尽可能多的代码。您不需要在工作区中始终打开 4000 个课程。将您的大型项目切成可管理的块。

  5. 用纯 Java servlet 替换 JSP 并使用 HTML 呈现库(如rendersnake)或使用与 HTML 配合得更好的编程语言(如Groovy)。

  6. 得到一些像样的硬件。具有四核和 8GB RAM 的新 PC 售价 1000 美元。如果您每天节省十分钟,投资将在 50 天内支付(按 1 人的速度,总共需要 1000 美元/天)。

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

于 2011-04-04T12:20:25.923 回答
1

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

  • 我们使用 maven,所以有一个target目录,其中包含所有 JSP 和一些其他 XML 的副本。我认识到它们有时会被 WTP 验证器扫描。但这不是必需的,因此我已将它们排除在验证之外(Project/Properties/Validation/XXX/Exclude Group/)。(将目录标记为派生时,您应该能够获得相同的效果target,但这有时对我不起作用;-(
  • 我已经观察到(未经科学证明),使用 JSPX 的 WTP 似乎比使用 JSP 文件更快。
于 2011-04-04T12:42:48.700 回答
1

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

于 2011-11-07T17:21:52.223 回答
0

无法发表评论,所以我将在此答案中发表评论。

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

于 2011-03-27T15:52:07.670 回答