Проект Eclipse webtools (WTP) и его производительность / качество
наша компания использует eclipse уже несколько лет (мы используем WTP с момента выпуска 0.7)
в настоящее время я оцениваю затмение 3.6.2 с WTP 3.2.3 который должен заменить eclipse 3.4.2 с WTP 3.0.4 как наш основной IDE.
и я должен сказать, что еще раз я очень разочарован в отношении производительности:
WTP 3.2.3 кажется намного медленнее, чем 3.0.4.
На самом деле мне действительно интересно, почему WTP становится медленнее с каждым выпуском.
одно из наших приложений (динамический веб-проект) содержит около 4000 классов java и 700 JSP / JSP фрагментов. Нам нужна только базовая функциональность WTP для разработки JSP, xmls и xsd. Нам не нужны высокие софистические функции, такие как дали (должны ли инструменты JPA действительно покрываться a webtools project?),Весы или визуальный редактор xml в первом место.
еще один интересный момент заключается в том, что WTP кажется замедлить всю IDE. SWT не отвечает за какую - то долю секунды, загрузка ЦП очень высока (особенно после сборки-если вы посмотрите на системные задания, несколько индексаторов jsp/javascript выполняют работу в течение нескольких минут, даже если все валидаторы сборки WTP были отключены), открытие новых файлов происходит медленнее, навигация по проекту и т. д.
это особенно заметно на старые машины, которые содержат только одно ядро процессора.
хуже всего то, что у меня есть ощущение, что команда разработчиков WTP не очень заботится о производительности (например, взгляните на http://wiki.eclipse.org/WTP_Performance_Tests страница-последнее обновление состоялось в 2008 году).
сообщения об ошибках и сообщения в группах новостей относительно производительности основных функций (например, редактирование/проверка jsp) часто игнорируются или закрываются через некоторое время, некоторые примеры: здесь,здесь,и здесь.
пожалуйста, не поймите меня неправильно:
Я не хочу обвинять 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 ответов:
чтобы ответить, я возглавляю проекты, которые предоставляют функции редактирования источников JSP, XML и JavaScript в WTP. Простой факт заключается в том, что мы не тратим много времени на тесты производительности, потому что нам не хватает ресурсов для этого. Конечно, мы хотели бы быть проактивными, а не реактивными, но мы склонны сначала уделять свое время функциональным проблемам. У нас есть продукт adopter, регулярно выполняющий регрессионные тесты производительности, но я ожидаю, что тесты выполняются на многоядерных системах машины к настоящему времени-и у нас не было никаких новых красных флагов сообщили нам в течение некоторого времени.
из 3 ошибок, с которыми вы связаны, 2 предшествуют версии 3.0.4, которую вы хвалите, а третья-либо проблема с производительностью форматирования (поскольку она адресована), либо одна с проверкой типа as-you, специфичной для XML-файлов (исправление которой вызвало бы утечку памяти в Xerces, iirc, поэтому мы не помещаем ее в то время). Если у вас есть конкретные проекты, которые можно прикрепить к ошибке и сказать: "делать медленнее в 3.2 по Y количество", мы сделаем все возможное, чтобы выяснить, где есть регрессия.
Что касается индексаторов, то они должны хотя бы в конце концов завершить. Информация на диске, которая хранится, изменилась между версиями WTP, и эти файлы необходимо повторно обработать, чтобы они снова были включены в операции поиска и (где это реализовано) рефакторинга. Как только начальная индексация завершена, она должна действовать постепенно и быть практически незаметной. Один архитектурный изменение, с которым вы можете столкнуться, заключается в том, что для JSP вся рабочая область должна быть индексирована в один сеанс рабочей среды для этого индекса должен считаться "актуальным". Закрытие Eclipse из-за разочарования только продлит воздействие этой переработки.
похоже, что стандартная установка вашей компании включает в себя всю WTP, а не прокатку собственного пользовательского дистрибутива. Я призываю вас проверить запуск и завершение работы страница настройки и отключите ранний запуск любой функции, которую вы не заинтересованы в использовании. Ничто из того, что вы упомянули, не использует этот объект, но есть и другие области WTP и платформы, которые это делают. Все, что вы не заинтересованы в проверке, является честной игрой на проверка страница предпочтений, а также настройка для проверки фрагментов JSP по умолчанию на Web/ JSP Files/проверка страница настройки.
У нас такая же проблема с WTP 3.2.3 здесь тоже. Мы используем его в нашем продукте в течение нескольких лет, но принятие наших разработчиков и клиентов в этом инструменте уменьшается с каждым годом, потому что в каждом новом выпуске он все медленнее и медленнее.
Я хотел бы использовать его, если бы я мог отключить все "расширенные" функции, но, как вы упомянули, Вы не можете отключить индексаторы вообще. Также вы не можете остановить валидатор файлов JSP, если он уже запущен (вы можете проверить это, если вы имейте столько файлов, сколько у вас есть, и у нас также есть около 1000 файлов JSP и много файлов тегов в нашем проекте).
Я также могу доказать, что увеличение памяти не помогает. Это только предотвращает сбои всего eclipse, но это не уменьшает UI, блокирующий внутренние операции WTP.
в самой новой версии 3.2.3 я получил много зависает, когда я запуск Tomcat внутри посмотреть сервера. Элемент UI просто зависает о 1 минута. Это не только у меня есть зависания, это все мои коллеги, которые работают на Windows, имеют ту же проблему. На Linux я не знаю об этой проблеме.
также есть проблемы в WTP, когда у вас нет доступа к интернету. Кажется, есть запрос к некоторым реестрам для загрузки схем или таких вещей, и если у вас нет подключения, то он просто зависает и ждет тайм-аута.
Я не знаю, кто виноват: WTP или JBoss Tools. Дело в том, что, когда я работаю с GWT (минимальный JSP), я пошел противоположным путем: нет WTP вообще!!! Теперь я использую простой Eclipse для Java и использую конфигурацию запуска для развертывания (программно вызывая ANT) и запуска сервера, и я никогда не оглядывался назад!!! Затмение раньше занимало ~1,5 ГБ и разбилось несколько раз. Теперь он сидит на ~800 МБ, и вся окружающая среда стала более стабильной.
Я видел подобные эффекты, вот одно решение, которое может быть подходящим в некоторых средах проекта...
чтобы гарантировать быструю и ответственную среду веб-проекта Eclipse, подумайте об этом:
- использовать Eclipse IDE для разработчиков Java
- 98MB версия является более компактной, чем 200МБ версия УО
- из General / Startup и Shutdown отключите все, кроме "Eclipse UI"
- из проверки, отключить валидаторы, которые вы не нужно
- эти наверное предотвратить некоторые проблемы с производительностью (YMMW)
- Используем Jetty
- вам не нужно WTP или любой другие плагины, это чистая Java
- как Tomcat, но очень быстро и просто установить в любую среду IDE / environment
- встроить непосредственно в файлы проекта, настроить один раз для каждого разработчика
- работает в любой IDE (Eclipse, IDEA, JDeveloper..)
- начать Контейнер сервлетов с помощью "отладки" / "запуск"
- завершение работы контейнера сервлета, нажав красный флажок на консоли Eclipse
- консоль IDE, отладка и замена горячего кода & JRebel отлично работает
результат: быстрое и отзывчивое затмение по сравнению со многими другими установками Eclipse, которые используют версию Eclipse EE с материалом WTP.
Почему? Возможно, какая-то функция Eclipse или плагин содержит ошибки или просто использует ресурсы в a плохой способ, и это делает Eclipse UI вялым.
Не Java EE Eclipse достаточно хорош даже для многих сред проекта Java EE, все зависит от вашей архитектуры и каких инструментов вы используете..
вот краткий учебник, чтобы начать работу в случае, если вы хотите попробовать Jetty Servlet Container с Eclipse. Смотрите https://vaadin.com/web/jani/home/-/blogs/vaadin-for-everyone-how-to-get-started . Скачать VaadinProjectForAnyIDE.зип, это проект Eclipse. Просто игнорировать, что фреймворк Vaadin вещи и заменить HelloWorldApplication.java с вашим собственным сервлетом и редактировать веб.xml соответственно.
еще одна вещь. С версией Eclipse EE вы также можете попробовать J2EE preview server, который на самом деле является Jetty, встроенным в пакет Eclipse. Однако, это также использует механизм ГУР.
я также думаю, что стабильность и производительность Eclipse / WTP несколько настораживает. Я использую Eclipse с середины 2003 года и пробовал WTP с самых первых выпусков.
сначала качество было абсолютно бездонным, но для 0.x версия я не мог жаловаться, конечно. Ожидая созревания WTP, я использовал MyEclipse, который был вроде бы в порядке, но тоже имел свои недостатки (и частично основанный на WTP, унаследовал некоторые из WTP).
когда MyEclipse стал тяжелее и тяжелее, медленнее и медленнее, и мы столкнулись с несколькими проблемами стабильности, мы переключились на "чистый WTP". Все мы использовали был очень основным с JSP/JSF из редактора и развертывания.
поскольку WTP не выполняет инкрементное развертывание (по крайней мере, не для JBoss server runtime), мы добавили отдельную серверную среду выполнения из JBoss tools. Когда мы приняли Facelets, мы также переключились на Редактор из JBoss tools.
однако мы столкнулись с большим количеством проблем, которые мы также имели с MyEclipse. Там бывают необъяснимые замедления, но гораздо хуже обстоят различные проблемы стабильности. Есть много неудобных исключений и сбоев. Типовое значение. файл журнала на многих разных рабочих станциях, которые я рассматривал, переполнен исключениями. Небольшой выбор из последних 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 tools есть "что-то" исправлено, и каждая версия такой проблемы появляется в несколько иной форме.
между проблемами стабильности я могу выполнить некоторую работу, и мне нравится автоматическое завершение и навигация по функциям, которые предлагают мне Редакторы (что не позволяет мне переключаться на текстовый редактор и полностью строить в командной строке), но я уверен, что мне понравится некоторая повышенная стабильность.
безусловно, лучший способ ускорить мои проекты - это предварительно скомпилировать код, который я в настоящее время не использую. У нас есть около 20 проектов, которые составляют нашу систему, и при работе над любой конкретной проблемой я касаюсь только определенного подмножества этих файлов java. Компиляция большей части кода, который я не буду трогать и бросать его в некоторые .jar'S, а затем использование этого в качестве источника вместо включения проектов, как оказалось, значительно ускоряет процесс. Я думаю, что это поможет вам также, если у вас есть 4К+ файлы. Каждый проект просто имеет немного сборки.xml, который сделает банку из него, чтобы включить.
Что касается ошеломляющей медлительности в редактировании JSP. У меня те же проблемы, это просто так чертовски медленно. У меня не так много больше, чем 100 JSP файлов, но у меня те же проблемы, как и у вас. Мое решение было просто бросить деньги на аппаратное обеспечение, которое я должен признать, мне нравится делать: P.
ответить на следующий вопрос: есть ли у вас какие-то лучшие практики, чтобы ускорить его, особенно для верхнего среднего размера, как у нас?
отключение проверки и автоматического построения после сохранения файла является хорошим началом для повышения производительности.
Я отключил редактор WTP JSP по причинам, которые вы упомянули выше: ему просто нужно слишком много ресурсов. Еще несколько вещей, которые вы должны рассмотреть:
редактировать JSP в обычном редакторе HTML. Это означает, что вы не получаете завершение кода это хорошо. IMO, смешивание Java и HTML-это ошибка в первую очередь, и редактор не может это исправить. Поместите весь код Java в вспомогательные компоненты (которые вы можете легко протестировать) и просто получите доступ к компонентам из JSP. Это должно избавиться от 99% всех
<% %>
теги и решить большинство ваших проблем уже.подумайте об использовании Spring, чтобы иметь возможность создавать более сложные бобы и вводить их в свои JSP, используя следующие шаблоны:
- как впрыснуть фасоли весны в SimpleTag jsp 2.0?
Используйте SpringBeanAutowiringSupport:
<%! @Autowired private Bean bean; public void jspInit() { SpringBeanAutowiringSupport .processInjectionBasedOnServletContext( this, getServletContext() ); } %>
попробуйте другую виртуальную машину. Редакторы ГП создает огромное количество объектов, и теперь все виртуальные машины (реализации GC) могут справиться с этим одинаково хорошо. Если вы используете Java Sun, попробуйте JRockit или IBMs J9. Также играйте с настройками GC. Увеличение ОЗУ не поможет, потому что если у вас есть проблемы с GC, больше ОЗУ обычно только ухудшает ситуацию (так как GC придется обрабатывать больше данных).
Прекомпиляции как можно больше кода. Вам не нужно постоянно открывать 4000 классов в вашем рабочем пространстве. Сократить ваши огромный проект в управляемые куски.
замените JSP простыми сервлетами Java и используйте библиотеки рендеринга HTML, такие как rendersnake или использовать язык программирования, который играет более приятно с HTML (типа в Groovy).
получить приличное железо. Новый ПК с четырехъядерным процессором и 8 ГБ оперативной памяти стоит $ 1000. Если вы экономите десять минут каждый день, инвестиции будут оплачены в течение 50 дней (из расчета 1 человек стоит $ 1000 / день в общем.)
попробовать MyEclipse который имеет гораздо лучшие веб-Редакторы. Редактор JSP лучше, чем WTP (например, завершение кода работает большую часть времени), но он все еще вялый.
WTP (3.2.3) для меня тоже медленный. Я верю, что нашел несколько способов сделать это не так медленно:
- мы используем maven, так что есть
target
каталог, который содержит копию всех JSP и некоторых других XML-Х. Я признал, что они иногда сканируются валидаторами WTP. Но это не обязательно, поэтому я исключил их из проверки (Project/Properties/Validation/XXX/Exclude Group/). (вы должны быть в состоянии получить тот же эффект при разметкеtarget
каталог как производный, но это не работает для меня несколько раз ; - ()- Я сделал (научно не доказано) наблюдение, что WTP, кажется, быстрее с jspx, чем файлы JSP.
Если вам нужны barebones Java EE, тогда вам лучше с Netbeans, если вам нужно все, но просто работать, вам лучше с IDEA. Это так просто, как это.
не смог прокомментировать, поэтому я просто добавлю свой комментарий к этому ответу.
вы пробовали увеличить выделение памяти Eclipse, я знаю, что он все время падал, когда я использовал его на Mac OS X некоторое время назад. Существует конфигурационный файл, который имеет базовое распределение ОЗУ в нем, как только я изменил этот файл и дал ему дополнительные 128 мегабайт памяти, он вел себя лучше. Не уверен, что это повлияет на WTP, я комментирую больше в отношении самого основного приложения Eclipse.