Как улучшить производительность при разработке Java основанные на EE веб-приложения

Тогда у вас есть различие между собакой и кошкой. Понимание того, что вы пометили данные 0 как кошку, а 1 как собаку.

Выходные данные представляют двоичное событие, когда значение, близкое к нулю, равно коту, а когда значение близко к 1 - это собака. р (собака) = предсказание и р (кошка) = 1 - р (собака).

Исследование, называемое ROC-кривой или PR-кривой , обычно проводится для определения того, в какой момент проводить различие между кошкой и собакой.

Но в вашем случае, чтобы идти быстро, вы можете рассмотреть 0,5, то есть:

p = model.predict([inp]) 
is_cat = p <= 0.5
is_dog = p> 0.5
25
задан Vadim Kotov 15 August 2017 в 08:45
поделиться

14 ответов

Я верю <забастовка> EE Java , стек Java на самом деле очень хорош. Существует несколько причин, объясняющих низкую производительность EE Java:

  • Являющийся “the предприятие stack”, это часто используется для создания скучный, ужасный, “good enough” приложения и, в целом, , предприятия склонны не притягивать великих разработчиков , кто любит программировать, и думает и заботится о том, что они делают. Качество программного обеспечения в мире предприятия не является большим.
  • Являющийся предприятием складывают, где деньги, поставщики программного обеспечения пытаются продать что-то им. Они создают огромные, сложные и дорогие решения, не потому что они хороши, но просто потому что они могли продать их предприятиям.
  • Предприятия часто очень не склонны к риску и все, что они добиваются большего успеха быть “standardized”. Стандарты создаются или после , некоторая технология оказалась успешной или прежде . В обоих случаях, it’s плохо для предприятий (и Java). Предприятия заканчивают тем, что использовали или хорошую технологию слишком поздно или прямую неудавшуюся технологию. Последний случай также очень опасен, потому что он создает ложное восприятие, что технология (иначе полный отказ) должна быть хорошей, если он стандартизирован, и все используют его.
  • Исторически, платформа EE Java, казалось, притянула много астронавтов архитектуры и разработчиков в крупных компаниях, продвинутых на архитекторов, чьи только цель состояла в том, чтобы создать больше слоев, больше платформ, больше абстракций и больше сложности.

It’s не, что нет никаких хороших инструментов Java и платформ; it’s, что существует слишком много плохих, слишком много сверхспроектированных, слишком много бюрократических процессов и методологий, слишком много бесполезных стандартов.

В таком грязном мире it’s не только конкретный выбор инструментов Вы выбираете, который влияет на Вашу производительность. It’s главным образом о Вас, о Ваших значениях, о том, как можно отклонить большинство решений, предложенных Вам сообществом, поставщиками, коллегами и менеджерами. It’s о Вас идущий вразрез с током, приблизительно [1 110] Ваш здравый смысл, приблизительно [1 111] Вы опрос каждой основной веры и “best practice”.

Тем не менее одни только инструменты не собираются изменять Вашу производительность очень, и с другой стороны, правильные люди могут быть продуктивными с нижними инструментами также.

Мой совет:

  • Don’t используют технологию только потому, что it’s стандарт, потому что все используют его, или потому что it’s, официально рекомендуемый Sun. Используйте технологию, только если Вы лично думаете it’s лучший инструмент для Вашего задания. Таким образом, можно отклонить технологии, такие как JSF, JSP, веб-сервисы, JMS, EJB, JTA, OSGi, MDA.
  • Сохраняют это простым, используют Ваш здравый смысл, подвергают сомнению все. Необходимо ли действительно опубликовать объекты для удаленного доступа? Необходимо ли действительно создать другой уровень абстракции так, чтобы можно было переключиться от, в спящем режиме до TopLink? Необходимо ли действительно преобразовать данные в XML десять раз каждый раз, когда Вам нужны они? Вам действительно нужна XML-схема? Вам действительно нужно все, чтобы настраиваться, являются взаимозаменяемыми? Во времени выполнения? Неразработчиками?
  • Сохраняют процесс простым. Будьте гибкие . Вам действительно нужна та документация? Необходимо ли действительно описать каждый экран в огромной таблице, он одобрил, вводит его к некоторому самодельному инструменту и затем генерирует JSP? У Вас есть компетентные программисты, или Вы разрабатываете все сначала и программистов только “translate” к Java?
  • дизайн WYSIWYG HTML doesn’t работа.
  • Графическое программирование в общей работе doesn’t. Это включает UML как проект и UML как язык программирования , MDA, блок-схемы страницы рисунка. Генерация кода плоха.
  • Никогда не разрабатывают платформу до использования оно , всегда получает платформу .
  • Предпочитают платформы, которые имеют только мало конфигурации XML.
  • Борются за низкое количество LOC. Взгляд фактический символы в Вашем коде. Действительно ли каждый символ важен? Думать. Что можно сделать для создания кода меньшим? Вам нужен тот класс? Что это делает? Почему необходимо сделать это?
  • Тестирование не является священной коровой; Вам don’t нужно 100%-е тестовое покрытие. Протестируйте только, что имеет смысл. Если it’s трудный протестировать, сделайте это более простым; или don’t тестируют его вообще. Don’t тестируют общий вид.

И наконец, некоторые конкретные рекомендации Java:

  • Для попытки уровня представления Гобелен . Почему я люблю его? Поскольку с Гобеленом можно создать красивый код. It’s, специально разработанный для этого, так, чтобы Ваш код мог быть красив . Ваш код. Красивым я имею в виду все, что имеет значение †“it’s короткий, легкий измениться, легкий читать, легкий создать Ваши абстракции, и все еще гибкий, это, doesn’t пытаются скрыть то, что Вы разрабатываете для сети. Конечно, it’s все еще Вы , кто делает Ваш код красивым.
  • Не стесняются использовать, в спящем режиме, специально для Приложений типа CRUD и крупных приложений. Don’t беспокоятся JPA. It’s не серебряная пуля, хотя, с ORM Вы всегда собираетесь торговать одним набором проблем с другим.
  • Только небольшой Spring, Вы shouldn’t нужно много, так как you’ve тщательно избежал всех прерываний EE Java. Используйте внедрение зависимости экономно.
  • , После всего из которого, можно найти, слишком подробный язык Java и не очень полезный при абстракции далеко Вас копирует/вставляет код. Если Вы хотите экспериментировать, судите Scala. Проблема состоит в том, что основной коммерческий аргумент Scala - то, что Вы извлекаете всю пользу из современных языков при тихом хранении безопасности типов, и в то же время, нет никакого тело поддержка IDE. Используясь переохлаждать IDE Java, это, который doesn’t имеют много смысла переключать на Scala, если there’s поддержка IDE, которая стабильна и надежна. Достаточно стабильный недостаточно.
49
ответ дан Cœur 28 November 2019 в 18:07
поделиться

Ну, я не действительно парень Java, таким образом, я не могу сказать многое, за исключением... JSF

Мы пытались использовать его в течение некоторого времени и это было бедствие. Almots все шаги основ должен был быть передан с большим количеством боли, никакой документации, никаких примеров, никакого общественного знания. Мы использовали тогда один плагин для Eclipse (Exadel Studio), мы взглянули на несколько других платформ JSF, они были все несовместимыми и плохо зарегистрированы. На самом деле, всех те, которых мы попробовали, только платформа Sun (забыл ее имя, на основе NetBeans) могли создать новый проект JSF, даже компилируемый из поля. Остальные потребовали многих дней конфигурации апача и других вещей, который для неопытного человека является реальной проблемой (хотя я управлял им).

Наша команда провела несколько месяцев на что-то, что было сделано позже всего за несколько недель с ASP.NET. Люди были и неопытны в JSF и ASP.NET.

, Если экосистема JSF все еще, что плохо, как это было в 2007, я рекомендую избежать его в целом, производительность вне рассмотрения так или иначе. Возможно, палка с JSP или чем-то, что доказано времени и хорошо разработано?

-1
ответ дан User 28 November 2019 в 18:07
поделиться

Я пошел бы с платформа Лифта записанный в Scala. Вы будете видеть большое повышение производительности только путем переключения на Scala. Scala также очень стабилен, и чрезвычайно легко назвать код Java от Вашего кода Scala. Не только это, но и это весьма схоже с Java, но и с некоторыми дополнительными функциями. Для некоторых примеров необходимо обратиться к 5 Вещей, которые Java-разработчик должен знать о Scala. Twitter переместит часть, он - кодовая база Scala.

Вы никогда не будете "застревать" на части кода, потому что можно просто думать о том, как Вы сделали бы это в Java и написали бы подобный код. Функции первого класса и агенты дадут Вам еще большее повышение производительности и находятся оба в Scala. Scala, конечно, со статическим контролем типов и имеет производительность, которая подобна Java.

я заключу автору в кавычки платформы Лифта для описания его:

Лифт одалживает у лучшей из существующих платформ, обеспечивая

  • очень детализированные сессии Побережья и направляющие безопасности быстрая флэш-память к удару
  • "больше Django, чем просто CRUD включен"
  • благоприятный для разработчика стиль шаблонной обработки Калитки (см. Представление Лифта
    Первый)

И потому что приложения Лифта записаны в Scala, изящном новом языке JVM, можно все еще пользоваться любимыми библиотеками Java и развернуться к любимому Контейнеру Сервлета. Используйте код, который Вы уже написали и развертываете на контейнере, который Вы уже настроили!

0
ответ дан Daniel O 28 November 2019 в 18:07
поделиться

Я использовал Шов Jboss для нескольких прошлых лет и нахожу, что это очень продуктивный способ разработать в EE Java (использующий EJB3, Быть в спящем режиме, Facelets). Я также вношу свою лепту PHP, кодирующего на стороне, и могу честно сказать, что я более продуктивен со Швом (хотя это - вероятно, также признак моих навыков PHP.)

Для меня несколько выделений были бы:

  • Горячий развертываются кода (абсолютная необходимая вещь)
  • DRY с Facelets
  • основанная на аннотации конфигурация
  • Обширные общедоступные компоненты (особенно ajax4jsf)
  • Поддержка IDE со стороны Инструментов Jboss

существуют инструменты в IDE и из командной строки для создания скелетного кода похожим способом к RoR.

1
ответ дан Damo 28 November 2019 в 18:07
поделиться

Используйте AOP (Аспектно-ориентированное программирование) для перекрестных сокращающих аспектов как вход, авторизация и т.д. Можно или использовать AOP Spring или AspectJ. Это заставляет код создать помехи свободный и удобный в сопровождении.

1
ответ дан Thejesh GN 28 November 2019 в 18:07
поделиться

Начиная с Jython 2.5 можно использовать django для удовлетворения требований, которые Вы перечислили. Довольно легко генерировать военные файлы из django проектов и развернуть их на серверах приложений J2EE.

1
ответ дан Vasil 28 November 2019 в 18:07
поделиться

Просто требуемый для подачи в другой идее... можно на самом деле использовать JRuby и направляющие (подобный предыдущему комментарию о Django и Jython).

, Если Вы используете JRuby с направляющими и Стойкой JRuby (и возможно некоторые другие утилиты... Я не был одним для фактического получения интеграции, идущей первоначально), можно развернуть дополнения направляющих JRuby к существующему веб-приложению Java. Мы имеем приложение JSP прежней версии, развернутое с Tomcat, и теперь начинаем добавлять новые страницы с помощью направляющих только с что установка (в дополнение к расширению стороны JSP когда необходимый). До сих пор это было довольно успешно, хотя у нас нет ни одной из главных страниц интенсивного трафика реализованной в направляющих, таким образом, я не знаю, как хорошо это масштабируется.

Мы имеем полный доступ к сессии и даже настроили механизмы для вызова JSPs от страниц Rails (таких как существующий заголовок, и JSP типа нижнего колонтитула включает). Это прилагает некоторые усилия и метод проб и ошибок, чтобы полностью интегрировать эти 2, но если направляющие и JRuby являются опцией, я настоятельно рекомендую его (как персональный вентилятор Ruby).

коллега А баловался Швом JBoss, который является платформой Gavin King (парень, который принес нам, в спящем режиме), который был предназначен для эмуляции направляющих. Видя обоих, я чувствую, что с направляющими намного легче разработать.

1
ответ дан Mike Stone 28 November 2019 в 18:07
поделиться

Это часто цитируется, что RoR и подобные платформы на основе динамических языков являются более продуктивными средами, но мне действительно интересно знать, существуют ли точные данные для поддержки этого. Это не было бы легко, поскольку нужно быть удостоверен, что она не сравнивает яблоки с апельсинами. Вещи как тип проекта (web 2.0, корпоративное приложение) и размер команды должны быть учтены. Однако для маленьких проектов более, чем очевидно, что такие платформы действительно намного более продуктивны, чем EE Java. Таким образом, это - короткий список аргументов, используемых для поддержки этого и что можно сделать для них в мире Java.

Ruby является более интуитивным и кратким языком. Можно сделать то же самое с намного меньшим количеством кода.

я не думаю, что у Вас может быть то же самое в Java, если, конечно, Вы не используете динамический язык, который работает в JVM (JRuby, Scala, Groovy). Иначе Ваш IDE может помочь. В Jave IDE является существенным инструментом, и он расплатится с Вами, если Вы будете учиться использовать его хорошо (генерация кода, отрывки, осуществляя рефакторинг). На самом деле существует много вещей, которые можно сделать с IDE Java, которые просто невозможно сделать с IDE Python или Ruby. Плюс Вы обладают преимуществами статического типизированного языка. Может потребоваться больше времени для ввода, но это помогает Вам избежать частых ошибок.

Ruby является намного большим количеством забавы использовать. Делает разработчика более счастливым и более продуктивным.

То же как выше. Очень субъективный аргумент, по-моему, все же.

Конвенция по конфигурации делает вещи быстрее

, платформа внедрения зависимости А как Spring или Guice уже может помочь

Леса, MVC там для Вас.

Снова Java платформы MVC могут помочь

Базы данных, сделанные легкими. Объекты базы данных загрузки как объекты. Может изменить базу данных на лету.

В спящем режиме, iBatis, или другая платформа ORM может помочь. С В спящем режиме Инструменты , можно достигнуть схожей функциональности с тем, что Вы имеете в RoR с yml файлами

Загрузка новые модули немедленно

, Знаток или Ant Ivy могут помочь

Простое развертывание для тестирования

, Ваш IDE или Причал могут помочь. На самом деле отладка легче с Тестированием Java

, интегрированным с платформой. Использование фиктивных объектов упрощает тестирование

, платформа внедрения зависимости А может помочь с фиктивными объектами. JUnit был пионером платформ единицы. Я не думаю, что Java менее легко протестировать.

2
ответ дан Arjan Tijms 28 November 2019 в 18:07
поделиться

Grails является платформой веб-приложения Java, очень смоделированной после Ruby on Rails с подобными принципами (DRY, CoC), и повышения эффективности, но на основе существующих платформ Java (Spring, Будьте в спящем режиме, несколько других).

я работал над исследовательским проектом с помощью Grails в течение нескольких недель теперь (никакой предыдущий опыт в Grails или Groovy), и я вполне впечатлен. Существует несколько грубых краев - это не столь зрело как RoR, но можно получить результаты быстро и никогда нет чувства, что платформа стоит на пути.

, Возможно, это лучше всего проиллюстрировано этим конкретным примером: Я хотел отредактировать 2D массив объектов области в сетке на единственной веб-странице и нашел, что автоматическое отображение получающегося HTML запрашивает данные к объектам области (обеспеченный Spring MVC, я верю), имел ошибку, которая заставила некоторые данные быть отображенными на неправильных объектах. Я озирался в сети в течение часа, но по-видимому никто не встретился или решил проблему. В конечном счете я решил предшествовать автоматическому отображению и сделать это "вручную" - и затем нашел, что мне потребовались не больше, чем приблизительно 10 строк кода...

2
ответ дан Michael Borgwardt 28 November 2019 в 18:07
поделиться

Один важный момент при обсуждении производительности EE Java: необходимо использовать Java EE 5 и EJB3.x, так как они предусматривают новый уровень производительности (и функциональность) по сравнению с предыдущими выпусками.

Пребывание в стандартных спецификациях EE Java абсолютно важно, например, использование В спящем режиме вместо JPA, не выгодно для производительности. Нет никакого ограничения для отступания к функциям Hibernate, когда использование JPA, но при помощи В спящем режиме вместо JPA, Вы привязываетесь в единственного поставщика решения для хранения данных без дешевого выхода. Вся эта мысль позади использования стандартов является тем же: концептуальная гибкость (путем включения различных реализаций) с доступной расширяемостью (при помощи собственных расширений, если абсолютно необходимый). Java EE 5 и EJB3 являются огромными шагами в этом направлении. Конечно, Вы хотите минимизировать любые собственные функции, но если некоторые кажутся абсолютно необходимыми, это - хороший знак, что они будут частью спецификации в следующем выпуске...

Основные препятствия производительности EE Java находятся в ее фокусе предприятия (предлагает намного больше, чем, чем необходимый для большинства проектов), и в его наследии (обратная совместимость). Существует также намного больше, чтобы быть сделанным на уровне представления с JSF, и управление состоянием - наблюдают за JSR-299 для обращения к ним среди других улучшений.

3
ответ дан Arjan Tijms 28 November 2019 в 18:07
поделиться

Javarebel может значительно уменьшить время, проведенное во время веб-разработки с помощью Java.

Позволяют мне заключить в кавычки здесь официальный сайт:

JavaRebel является плагином JVM (-javaagent), который позволяет Вам видеть изменения в своем коде сразу без потребности повторно развернуть приложение или выполнить контейнерный перезапуск. Если Вы устали от наблюдения, что журналы протекают и хотят видеть Ваши изменения так, чтобы можно было продолжать идти - JavaRebel является новым лучшим другом.

5
ответ дан Anton Kuzmin 28 November 2019 в 18:07
поделиться

Платформы как Spring, В спящем режиме , Калитка , конечно, справка, чтобы упростить и ускорить веб-разработку, поскольку они обеспечивают высокую степень тестируемости и интегрируются очень хорошо. Но недостаточно достигнуть производительности RoR, даже если у Вас есть хороший набор методов разработки. Существует все еще слишком много технического материала и необходимой инфраструктуры.

Grails является, возможно, недостающей частью в этом изображении для получения ближе к RoR. Это - мое следующее экспериментирование.

BTW, мои события MDA являются обратным улучшения производительности, таким образом, я не упомяну их (на самом деле, MDA уничтожал нашу производительность).

6
ответ дан Pascal Thivent 28 November 2019 в 18:07
поделиться

Я определенно пошел бы для Spring вместе с, в спящем режиме для связанного с постоянством материала.

, Почему Spring?

преимущество использования Spring вместо другой платформы состоит в том, что спрингская философия должна быть" неразрушающая ". Обычно при использовании платформы по всей вероятности, Вы начнете зависеть от той платформы, которая может быть плохой проблемой, если заявление рассматривается для выполнения в течение более длительного времени, где тогда необходимо также сделать обслуживание и т.д. Spring использует так называемое "Инверсия Управления" (МОК) шаблон . В основном Ваш код не делает (он может, но это не иметь к), звонят Spring, но Spring позвонит Вам (голливудский принцип: "не звоните мне, я позвоню Вам"). Так, например, Вы можете использовать нормальный POJOs (Простые Объекты Java), и Вы не должны наследоваться никаким связанным с платформой классам/интерфейсам. Другой большой проблемой (если не самое большое) в Разработке программного обеспечения являются зависимости. Вы будете бороться за сокращение их как можно больше, так как они сделают Вашу жизнь тяжелее (особенно в обслуживании позже). Spring уменьшает зависимости среди Ваших компонентов существенно путем управления инстанцированием компонентов через конфигурационные файлы и внедрение зависимости шаблон. Я не хотел бы продолжать, лучшая вещь состоит в том, что Вы начинаете читать некоторые учебные руководства в чиновнике веб-сайт Spring . Первоначально, возможно, требуется некоторое время в понимании, но как только Вы получили его, Вы заработаете много преимуществ.

1
ответ дан Juri 28 November 2019 в 18:07
поделиться

Некоторые основные правила:

  1. Отключите сервер приложений - ОГРОМНЫЙ выигрыш по времени и качеству. Сохраните веб-контейнер, если необходимо, но настройте все в Spring и / или Hibernate, чтобы файл web.xml был минимальным.

  2. Протестируйте все, что вы теперь можете делать благодаря шагу 1 (не требуется XML во время развертывания или генерация кода: все уже настроено в процессе разработки).

  3. Используйте Wicket для реализации своего веб-уровня - никому не нужен JSP Больше; Wicket в 10 раз производительнее и прост в тестировании (см. Шаг 2).

  4. Используйте SCRUM и методологии гибкой разработки

В результате производительность Java настолько высока, насколько позволяют 4GL - у нас в Atomikos есть несколько проекты миграции нам понравились. Поскольку мы перешли с платформ 4GL на Java / Java EE, мы смогли сравнить оценки в обоих случаях.

0
ответ дан 28 November 2019 в 18:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: