IntelliJ IDEA: architecture, performance, development process
-
Upload
chashnikov -
Category
Technology
-
view
369 -
download
2
description
Transcript of IntelliJ IDEA: architecture, performance, development process
![Page 1: IntelliJ IDEA: architecture, performance, development process](https://reader033.fdocuments.in/reader033/viewer/2022061218/54b61b8c4a79599c038b4829/html5/thumbnails/1.jpg)
IntelliJ IDEA изнутри:архитектура, производительность,
процесс разработки
Чашников НиколайпрограммистJetBrains, Inc.
![Page 2: IntelliJ IDEA: architecture, performance, development process](https://reader033.fdocuments.in/reader033/viewer/2022061218/54b61b8c4a79599c038b4829/html5/thumbnails/2.jpg)
2http://www.jetbrains.com/idea/
План доклада
• Обзор элементов архитектуры IntelliJ IDEA
• Настройка IDE для увеличения скорости работы
• Процесс разработки продукта IntelliJ IDEA в JetBrains
![Page 3: IntelliJ IDEA: architecture, performance, development process](https://reader033.fdocuments.in/reader033/viewer/2022061218/54b61b8c4a79599c038b4829/html5/thumbnails/3.jpg)
3http://www.jetbrains.com/idea/
Система компонентов
• Компоненты хранятся в иерархии контейнеров PicoContainer
• Иерархия состоит из трёх уровней– Application– Project– Module
• Компоненты регистрируются в xml-файлах
![Page 4: IntelliJ IDEA: architecture, performance, development process](https://reader033.fdocuments.in/reader033/viewer/2022061218/54b61b8c4a79599c038b4829/html5/thumbnails/4.jpg)
4http://www.jetbrains.com/idea/
Компоненты и сервисы
• Компоненты: фиксированный жизненный цикл
• Сервисы: загрузка по требованию
init use dispose
![Page 5: IntelliJ IDEA: architecture, performance, development process](https://reader033.fdocuments.in/reader033/viewer/2022061218/54b61b8c4a79599c038b4829/html5/thumbnails/5.jpg)
5http://www.jetbrains.com/idea/
Расширения (Extensions)
Старый вариант (регистрация в java-коде):RenameHandlerRegistry.getInstance() .registerHandler(new AntRenameHandler());
Новый вариант (регистрация через xml):<renameHandler
implementation=“c.i.a.AntRenameHandler”/>
![Page 6: IntelliJ IDEA: architecture, performance, development process](https://reader033.fdocuments.in/reader033/viewer/2022061218/54b61b8c4a79599c038b4829/html5/thumbnails/6.jpg)
6http://www.jetbrains.com/idea/
Inspections
• около 2000 классов• обычно используется небольшая часть• загружаются при
– открытии файла в редакторе– просмотре списка в настройках IDE
• начиная с 11-й версии описание вынесено в xml
![Page 7: IntelliJ IDEA: architecture, performance, development process](https://reader033.fdocuments.in/reader033/viewer/2022061218/54b61b8c4a79599c038b4829/html5/thumbnails/7.jpg)
7http://www.jetbrains.com/idea/
Виртуальная файловая система
• типичный проект состоит из большого количества небольших файлов
• обход большого дерева директорий занимает много времени
• можно хранить в одном файле снимок всех файлов проекта
• доступ к файлам происходит через Virtual File System (VFS)
![Page 8: IntelliJ IDEA: architecture, performance, development process](https://reader033.fdocuments.in/reader033/viewer/2022061218/54b61b8c4a79599c038b4829/html5/thumbnails/8.jpg)
8http://www.jetbrains.com/idea/
Преимущества VFS
• унифицированный интерфейс к различным FS
• уведомления об изменениях в FS• возможность сохранять
дополнительные атрибуты файлов
![Page 9: IntelliJ IDEA: architecture, performance, development process](https://reader033.fdocuments.in/reader033/viewer/2022061218/54b61b8c4a79599c038b4829/html5/thumbnails/9.jpg)
9http://www.jetbrains.com/idea/
Синхронизация VFS с диском
• Запись в VFS приводит к синхронной записи на диск
• Изменения на диске попадают в VFS при вызове refresh:– при старте IDE– после завершения некоторых операций– при активации окна IDE (опционально)– при явном вызове Synchronize
![Page 10: IntelliJ IDEA: architecture, performance, development process](https://reader033.fdocuments.in/reader033/viewer/2022061218/54b61b8c4a79599c038b4829/html5/thumbnails/10.jpg)
10http://www.jetbrains.com/idea/
Ускорение синхронизации VFS
• Для быстрого выполнения refresh используется File Watcher
• Работает параллельно с IDE в отдельном процессе
• Слушает изменения на диске, используя системный API
![Page 11: IntelliJ IDEA: architecture, performance, development process](https://reader033.fdocuments.in/reader033/viewer/2022061218/54b61b8c4a79599c038b4829/html5/thumbnails/11.jpg)
11http://www.jetbrains.com/idea/
Индексы
• Строит отображение ключ->значение по содержимому файлов
• Ключи и значения могут быть произвольного вида, хранятся в бинарном формате
• Содержимое индекса зависит только от содержимого файлов, не зависит от проекта
![Page 12: IntelliJ IDEA: architecture, performance, development process](https://reader033.fdocuments.in/reader033/viewer/2022061218/54b61b8c4a79599c038b4829/html5/thumbnails/12.jpg)
12http://www.jetbrains.com/idea/
Основные индексы
• Индекс слов– ключ – хэшкод слова– значение – битовая маска места
вхождения (в коде, в комментарии, в строке)
– используется в Find in Path, Find Usages
• Индекс имён файлов• Индекс имён классов
![Page 13: IntelliJ IDEA: architecture, performance, development process](https://reader033.fdocuments.in/reader033/viewer/2022061218/54b61b8c4a79599c038b4829/html5/thumbnails/13.jpg)
13http://www.jetbrains.com/idea/
План доклада
• Обзор элементов архитектуры IntelliJ IDEA
• Настройка IDE для увеличения скорости работы
• Процесс разработки продукта IntelliJ IDEA в JetBrains
![Page 14: IntelliJ IDEA: architecture, performance, development process](https://reader033.fdocuments.in/reader033/viewer/2022061218/54b61b8c4a79599c038b4829/html5/thumbnails/14.jpg)
14http://www.jetbrains.com/idea/
Настройка IDE
• Используйте последнюю версию• Выключайте неиспользуемые плагины• Исключайте из проекта ненужные
директории– особенно содержащие результаты
компиляции
• Избегайте большого количества unversioned файлов в Changes View
![Page 15: IntelliJ IDEA: architecture, performance, development process](https://reader033.fdocuments.in/reader033/viewer/2022061218/54b61b8c4a79599c038b4829/html5/thumbnails/15.jpg)
15http://www.jetbrains.com/idea/
Настройка окружения
• Скорость работы IDE в основном определяется скоростью работы с файлами
• Не храните исходный код и системные директории IDE на сетевых дисках
• Выключите антивирус для системных директорий IDE
• Регулярно выполняйте дефрагментацию• Используйте SSD• Используйте Linux или Mac OS
![Page 16: IntelliJ IDEA: architecture, performance, development process](https://reader033.fdocuments.in/reader033/viewer/2022061218/54b61b8c4a79599c038b4829/html5/thumbnails/16.jpg)
16http://www.jetbrains.com/idea/
Оповещение о проблемах
• При зависании интерфейса на 5 секунд начинают автоматически генерироваться thread dumps
• Сохраняются в директории log (доступна через Help | Reveal Log)
• Также можно использовать профилятор (YourKit), включается в bin/idea.vmoptions
![Page 17: IntelliJ IDEA: architecture, performance, development process](https://reader033.fdocuments.in/reader033/viewer/2022061218/54b61b8c4a79599c038b4829/html5/thumbnails/17.jpg)
17http://www.jetbrains.com/idea/
План доклада
• Обзор элементов архитектуры IntelliJ IDEA
• Настройка IDE для увеличения скорости работы
• Процесс разработки продукта IntelliJ IDEA в JetBrains
![Page 18: IntelliJ IDEA: architecture, performance, development process](https://reader033.fdocuments.in/reader033/viewer/2022061218/54b61b8c4a79599c038b4829/html5/thumbnails/18.jpg)
18http://www.jetbrains.com/idea/
Для кого мы делаем продукты
• JetBrains производит software development tools
• IntelliJ IDEA: экстремальный dogfooding (eating your own dog food)
![Page 19: IntelliJ IDEA: architecture, performance, development process](https://reader033.fdocuments.in/reader033/viewer/2022061218/54b61b8c4a79599c038b4829/html5/thumbnails/19.jpg)
19http://www.jetbrains.com/idea/
Источники feedback(по количеству записей в issue tracker)
программисты в проектеIntelliJ IDEA
команда QA
пользователи EAP ипокупатели
![Page 20: IntelliJ IDEA: architecture, performance, development process](https://reader033.fdocuments.in/reader033/viewer/2022061218/54b61b8c4a79599c038b4829/html5/thumbnails/20.jpg)
20http://www.jetbrains.com/idea/
Feedback от команды IDEA
• на раннем этапе• качественный• более мотивирующий
![Page 21: IntelliJ IDEA: architecture, performance, development process](https://reader033.fdocuments.in/reader033/viewer/2022061218/54b61b8c4a79599c038b4829/html5/thumbnails/21.jpg)
21http://www.jetbrains.com/idea/
Early Access Program
• предварительные версии (EAP builds)• выходят раз в неделю• бесплатные (включают лицензию на
месяц)• встречаются очень активные участники
– есть те, кто отправил более тысячи issues в tracker
• взаимная польза
![Page 22: IntelliJ IDEA: architecture, performance, development process](https://reader033.fdocuments.in/reader033/viewer/2022061218/54b61b8c4a79599c038b4829/html5/thumbnails/22.jpg)
22http://www.jetbrains.com/idea/
Support для покупателей
• общение через e-mail• один уровень support между
пользователем и разработчиком• быстрая реакция
![Page 23: IntelliJ IDEA: architecture, performance, development process](https://reader033.fdocuments.in/reader033/viewer/2022061218/54b61b8c4a79599c038b4829/html5/thumbnails/23.jpg)
23http://www.jetbrains.com/idea/
Планирование новых версий
• Поддержка для новых языков• Поддержка для новых версий языков и
фреймворков• Улучшение поддержки существующих
языков• Улучшения и новые возможности,
предлагаемые членами команды• Новые возможности, которые просят
пользователи
![Page 24: IntelliJ IDEA: architecture, performance, development process](https://reader033.fdocuments.in/reader033/viewer/2022061218/54b61b8c4a79599c038b4829/html5/thumbnails/24.jpg)
24http://www.jetbrains.com/idea/
Источники информации
• IntelliJ IDEA:– http://www.jetbrains.com/idea
• Исходный код Community Edition:– https://github.com/JetBrains/intellij-community
• Discussion forums:– http://www.jetbrains.com/devnet/idea
• Early Access Program:– http://eap.jetbrains.com/idea
![Page 25: IntelliJ IDEA: architecture, performance, development process](https://reader033.fdocuments.in/reader033/viewer/2022061218/54b61b8c4a79599c038b4829/html5/thumbnails/25.jpg)
25http://www.jetbrains.com/idea/
Вопросы и ответы