company_banner

IntelliJ IDEA 2019.3: оптимизация производительности и улучшение качества

    Привет!

    В этом релизе мы сосредоточились на производительности и качестве. Вместе с другими командами JetBrains, мы занимались оптимизацией производительности, повышением отзывчивости интерфейса, улучшением существующей функциональности.

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

    Мы также работали над поддержкой новых фреймворков для создания микросервисов, таких как Micronaut, Quarkus и Helidon, и сделали долгожданную поддержку MongoDB.


    blog@2x (3)




    Оптимизация производительности


    Мы много работали над улучшением производительности IntelliJ IDEA. Вот что у нас получилось:


    • IntelliJ IDEA запускается гораздо быстрее.
    • Меньше зависаний редактора и интерфейса.
    • IDE потребляет меньше памяти, особенно при импорте Gradle-проектов.




    Одной из главных задач в этом году было сократить время запуска IDE. Мы внесли существенные архитектурные изменения в платформу IntelliJ: некоторые процессы, которые при запуске происходили последовательно, теперь выполняются параллельно. Кроме того, мы реорганизовали классы, чтобы ускорить инициализацию, оптимизировали загрузку шрифтов на macOS и многое другое.


    Мы уделили внимание повышению отзывчивости интерфейса и избавились от многих зависаний в различных частях IntelliJ IDEA. Нам удалось устранить причины зависаний из более чем 1600 баг-репортов. Кроме того, сообщать о зависаниях теперь легче.


    Теперь IntelliJ IDEA работает гораздо быстрее, когда в редакторе или отладчике открыто много вкладок, а также когда регулярное выражение соответствует очень длинным строкам в Find in Path. Открытие дерева проекта тоже занимает меньше времени.


    Мы ускорили работу редактора, оптимизировав вывод типов в Java. Вывод типов для длинных цепочек вызовов методов теперь работает намного быстрее. Подсветка синтаксиса Java тоже работает быстрее, особенно это касается методов с generic varargs (Arrays.asList, Map.ofEntries и т.д.), которые могут содержать десятки аргументов. Объединение нескольких строк с помощью действия Join Lines тоже ускорилось.


    Поддержка Kotlin 1.3.60 тоже привела к улучшениям, например, ускорилась подсветка синтаксиса Kotlin в редакторе.


    Другие исправления коснулись VCS: удалось сократить время обработки событий и игнорируемых файлов, устранить зависания и ускорить обновление статуса в больших проектах.


    В подсистеме сборки мы снизили пиковое потребление памяти при импорте больших Gradle-проектов. А еще исправили проблемы с редактированием файлов pom.xml в Maven-проектах: теперь IDE предлагает варианты автодополнения без задержек.


    Мы довольны результатами, но не останавливаемся на этом. В следующих версиях будем и дальше оптимизировать производительность и постараемся сделать запуск IDE еще быстрее.



    Улучшение качества


    Плагины

    У IntelliJ IDEA богатая экосистема плагинов, но есть недостаток: при установке или удалении плагина нужно перезапускать IDE. Мы начали решать эту проблему и реализовали базовую инфраструктуру для динамической установки плагинов, без перезапуска IDE. Пока что это работает только для тем интерфейса и сочетаний клавиш.


    Системы контроля версий

    Много нового в поддержке VCS. Чтобы упростить работу с ветками, вместо действия Checkout as... мы добавили два новых: Checkout и New Branch from Selected. Действие New Branch from Selected создает новую локальную ветку, но не включает отслеживание какой-либо удаленной ветки. При вызове действия Checkout IDE создает новую локальную ветку, извлекает ее из репозитория и включает отслеживание выбранной удаленной ветки, если нет локальной ветки с таким же именем.





    Мы переработали диалог Clone и сделали единый интерфейс для скачивания проектов с различных VCS-хостингов. Теперь вы можете войти в свой аккаунт прямо из обновленного диалога. Если вы уже залогинились, IDE покажет списки всех репозиториев, сгруппированных по учетным записям или организациям, в которых вы состоите.


    Кроме того, больше не нужно загружать ветку, чтобы отправить изменения в репозиторий: выберите нужную ветку в окне Branches и нажмите Push. Для перемещенных или переименованных файлов мы добавили столбец с именами файлов в File History. Еще одно полезное улучшение — возможность принудительно добавить файл в Git (или Mercurial), даже если он находится в списке .gitignore (или .hgignore).


    Другие улучшения

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


    Теперь есть простой способ просмотреть иерархию вызовов для выбранного поля: используйте новое действие Field Call Hierarchy (Ctrl/Cmd+Alt+H).


    Если у вас установлен флажок Show quick documentation on mouse move, при наведении указателя мыши на предупреждение или ошибку отобразится единая подсказка с описанием предупреждения или ошибки и справочной информацией о коде.
    Раньше в таких случаях IDE показывала только подсказку об ошибке без документации, а иногда появлялось целых два всплывающих окна.


    Мы обновили поведение диалога intention actions: действия не исчезнут из списка предложений, если вы выбрали одно из них и закрыли диалог.


    Окно Services теперь всегда отображается, и его поведение можно можно настроить внутри самого окна. Кроме того, вы можете скрыть определенные конфигурации запуска.


    А также:


    — Подсказки о несоответствии типа стали более подробными и понятными.
    — При открытии проекта IntelliJ IDEA показывает его название.
    — Мы поддержали вставки фрагментов кода на новых языках шаблонов, в частности Pug (ранее — Jade), Handlebars, EJS и Slim.
    — Появилась плавная прокрутка колесом мыши.
    — Полосы прокрутки можно сделать более заметными, используя чекбокс Use contrast scrollbars в меню Preferences/Settings | Appearance & Behavior | Appearance.

    Поддержка новых фреймворков и технологий


    Несмотря на то, что при подготовке этой версии мы в основном были сосредоточены на качестве, мы также работали над несколькими новыми функциями и рады их представить. Всё, что описано ниже, есть только в IntelliJ IDEA Ultimate.


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


    Во-первых, мы расширили помощь при написании кода и возможности навигации для фреймворков разработки микросервисов нового поколения: Micronaut, Quarkus и Helidon. Для тех, кто занимается реактивным программированием, мы добавили поддержку Spring Web Flux.




    Обычно микросервисы взаимодействуют друг с другом через HTTP/WebSocket, поэтому следующим шагом для нас было добавить поддержку API HTTP-клиентов Java, таких как java.net.URI/URL, Retrofit v2, OkHttp v3, а также клиентских библиотек популярных серверных фреймворков: Spring Feign, MicroProfile REST Client и т.д. Что важно, теперь IDE предоставляет автодополнение URL-адресов и навигацию для HTTP/WebSocket API.


    Во-вторых, мы добавили новое окно Endpoints, чтобы было удобно просматривать конечные точки вашего проекта. В этом окне отображаются как клиентские, так и серверные API. Постепенно сюда будут добавлены не только HTTP API, но и API обмена сообщениями, gRPC и GraphQL.


    Наконец, мы расширили поддержку спецификаций API. В этой версии мы поддержали Swagger 2 и OpenAPI Specification 3. Поддержка включает в себя проверку на соответствие схеме, автодополнение, навигацию, поиск использований и рефакторинг Rename в YAML/JSON-файлах, содержащих описания API.


    На данный момент все это работает только для проектов на Java и Kotlin, но в следующих версиях мы планируем поддержать другие языки и фреймворки.


    Кроме того, IntelliJ IDEA 2019.3 наконец поддерживает MongoDB. В этой версии коллекции и поля отображаются в проводнике баз данных, вы можете выполнять запросы и просматривать их результаты.



    Важные исправления


    — IDE теперь находит каталог, в который Gradle был установлен через Homebrew.
    — Стало проще вручную устанавливать домашний каталог Gradle.
    — IntelliJ IDEA теперь поддерживает хранение паролей в KWallet на Linux.
    — Для проектов JavaFX IDE может отображать файл FXML со встроенным Scene Builder на вкладке Scene Builder.
    — В окне Debug работает навигация с клавиатуры.
    — Можно скопировать выбранный текст из окна инспекции через Ctrl/Cmd+C.
    — Фокус не теряется при переключении между окнами IDE.
    — Улучшено расположение окон и всплывающих подсказок.
    — Если в IDE выбрана тема Darcula, системные окна MacOS при вызове открываются в темной теме.

    Мы также обновили JetBrains Runtime 11 (JBR 11).


    — Исправили рендеринг шрифтов на macOS Catalina.
    — Устранили проблему с открытием проекта на macOS 10.15 Catalina.
    — Исправили символы в диалоге Evaluate Expression.
    — IntelliJ IDEA обнаружит конфликты между сочетаниями клавиш IDE и шорткатами операционной системы.
    — В редакторе устранили ​​проблему со шрифтами, которые всегда были выделены курсивом.
    — Исправили начальный экран на Windows.

    Все подробности о новой версии читайте на сайте или посмотрите обзор (на английском).

    Команда JetBrains

    JetBrains
    148.53
    Делаем эффективные инструменты для разработчиков
    Share post

    Similar posts

    Comments 28

      0

      Отличный инструмент. На текущей работе пока Eclipse, но есть подвижки в сторону перехода на IDEA. Даже время на попробовать выделили. Попробовал и обнаружил багу при импорте проекта из Eclipse. Даже БАГУ или БАЖИЩЕ.
      Имеем свежеустановленную последнюю версию IDEA 2019.3 Ultimate (trial), импортируем существующий eclipse проект (импорт проходит внешне хорошо), нажимаем кнопочку Build и получаем девственно чистую директроию проекта, IDEA удалила все! Ах… как я был удивлен.


      Причина

      При импорте из eclipse (если просто создать проект из существующего исходного кода такого не происходит) IDEA все директории в которых есть файлы .jar или .class помечает как excluded, а при сборке удаляет.

        +1
        На текущей работе пока Eclipse, но есть подвижки в сторону перехода на IDEA.

        Работодатель не покупает лицензию, а из своего кармана платить не хочется? Или запрет на использование нерегламентированного ПО?

          0

          Так исторически сложилось. Работодатель вроде не против, но проекты на eclipse местами завязаны. Надо на первом шаге обеспечить что бы можно было и там и там работать.

          0

          О, у меня была похожая забавная ситуация, когда я пытался заставить hibernate-jpamodelgen писать метамодель в src/main/java в package *.entities.generated. Написал кучу нового кода, не закоммитил, решил протестить – запускаю сборку gradle – вся папка src пуста.


          Спасибо, что есть local history. А генерируемые файлы решил писать в src/generated/java, хотя и были небольшие проблемы с classpath'ом.

            +1
            Добрый день, IntelliJ IDEA не должна удалять excluded файлы при build'e. Создайте, пожалуйста, ишью на YouTrack (https://youtrack.jetbrains.com/issues/IDEA), просьба уточнить в ней, как именно собирается проект и, по возможности, предоставить пример, на котором проблема воспроизводится. Спасибо!
            –1
            Единственный минус JetBrains — катастрофически не хватает UX/UI дизайнера…
              +1
              У нас есть команда UX/UI, вы создавали тикеты на проблемы в UX/UI в нашем трекере?
                –1
                Не создавал, простите за прямоту, как по мне, то там в корне нужно менять все. Я понимаю цветовые схемы можно подбирать самому, но вот от этого «оранжевое на сером» которое идет с самого первого релиза — волосы встают дыбом. Расположение окон, подсказки, диалоговые инструменты, не имеют единого стиля, первое знакомство для меня было целым квестом, что где и почему.
                Фейерверк цветов кнопок, иконок, пунктов меню. Перенасыщение интерфейса. Неуместные скачки размеров шрифтов и размеров элементов управления. Нехватка минимализма.
                После VS больно смотреть На IDEA ес чес.
                  0
                  У всех разные вкусы (и разные мониторы). По мне, так у идеи самая идеальная цветовая схема.

                  Фейерверк цветов кнопок, иконок, пунктов меню. Перенасыщение интерфейса… Нехватка минимализма.

                  Откройте фотошоп/гимп, там примерно тоже самое. Всегда требуется некоторое время, чтобы разобраться в сложном ПО.
                    0
                    Спасибо! Пара советов:
                    1. Скачайте 15 тем для идеи в Plugins, наверняка хотя бы одна из них вам подойдет.
                    2. Попробуйте включить Distraction free mode, я его не выключаю уже года два. Шума станет намного меньше.
                      +1
                      Забавно, мне больно смотреть на VS после IDEA
                        0
                        Аналогично. Дефолтная схема очень даже приятная.
                        0
                        Фейерверк цветов кнопок, иконок, пунктов меню.

                        Вы, верно, на версию двухгодичной давности смотрите?
                        Примерно в версии 2018.3 заботливые УХУИ-специалисты похерили нормальные контрастные иконки и заменили их на нечто, больше всего напоминающее осеннюю слякоть под подошвами сапог.


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

                    0
                    вместо действия Checkout as… мы добавили два новых: Checkout и New Branch from Selected

                    И не один из них не работает так, как работал раньше «Checkout as». Теперь необходимо сначала выполнить «Checkout» а потом поменять имя. Спасибо.
                    И если вы, в JetBrains читаете, возможно рассмотрите небольшое улучшение, которое давно есть в eclipse, что бы при изменении имени ветки пробелы и запрещенные символы автоматически заменялись нижним подчеркиванием.
                    0
                    После обновления Idea начала ужасно лагать. То на поиске зависимостей, то еще на какой то функции. Почистил кеш — поиск зависимостей заработал, но зависало на какой то другой функции.
                    0

                    навскидку пару багов появилось


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

                    Мелочь, а неприятно.
                    Конечно же, IDEA больше радует день ото дня

                    +2
                    Исправьте пожалуйста несколько проблем (обе проблемы на Win10 и появились ДО 2019.3):
                    1) Принудительный фокус окна при git fetch/pull/push. Сценарий:
                    — IDEA работает в 2 окна (Back + Front)
                    — переключаюсь на новый бранч в Back (начинается fetch + indexing + «восстановление состояния окон» + maven/gradle refresh)
                    — если успеть переключиться на Front начать что-то делать (например в терминале печатать `npm run *` или начать создавать новый бранч) до того как Back закончит свою последовательность, то по ее окончании (или где-то в средине, на мой взгляд связанно именно с git) Back снова получит принудительный фокус No matter what

                    2) Символы с клавиатуры попадают в код, вместо нового окна. Сценарий:
                    — фокус находится где-то в коде
                    — ctrl+shift+F
                    — СРАЗУ начать что-то печатать или ctrl+V
                    — первые пару символов попадают в код, вместо окна поиска. Такая-же ситуация с всеми окнами при вызове которых текстовое поле автоматически должно получать фокус.
                      +2
                      Традиционный вопрос: эти проблемы есть в трекере?
                        0
                        переключаюсь на новый бранч в Back (начинается fetch + indexing + «восстановление состояния окон» + maven/gradle refresh)


                        Подтверждаю, такая же хрень. А индексирование обычно раньше минуты-двух не заканчивается.

                        +1
                        Есть баг-трекер. Создавайте таски. Голосуйте за другие.
                        0
                        В этом релизе мы сосредоточились на производительности

                        https://github.com/JetBrains/intellij-community/pull/1259


                        Посмотрите? Улучшение не бог весть какое значительное, но зато замена Method.getParameterTypes().length на Method.getParameterCount() может быть выполнена автоматически и точно ничего не сломает.

                          0

                          Заметил одно очстранное поведение, если выташить таб с открытым классом с помошью shift + f4 из основного окна, то при нажатии в окне с деревом проекта на иконку которая показывает местоположение файла в проекте. Она будет всегда орентироваться на основное окно, а не то которое мы открыли и выташили из основного.

                            +1
                            Несколько месяцев назад решил попробовать Rider как замена VS. Очень круто. В плане навигации, скорости и рефакторинга просто несравнимо. Есть конечно же неприятные минусы (поддержка XAML, определенный моменты при дебаггинге к примеру) которые не позволяют удалить VS.
                            Свитч между проектами происходит быстрее чем VS успевает просто закрыть текущий проджект. Короче, это явно стоит несчастных 13 баксов в месяц.
                              0
                              А Вы не могли бы пояснить в чем конкретно мы отстаем в плане поддержки XAML? Не хватает hot reload или чего-то еще?
                              Спасибо!
                                0
                                Чего конкретно не хватает, я сказать не могу так как рендер замла не работает у меня в принципе (имею в виду, на рабочих проектах). Студия парсит всё без проблем. Я хотел создать таску но, судя по всему, на замл их уже вагон и тележка, режил не добрасывать. С нуля я приложения не создавал еще. Версия 19.2 правда. С 19.3 еще не пробовал.

                            Only users with full accounts can post comments. Log in, please.