Производительность VS Code: как подобрать самые лучшие расширения

Перевод первой части статьи «VS Code Performance – How to Optimize Visual Studio Code and Choose the «Best» Extensions».

Visual Studio Code (VS Code) изначально создан легковесным. В нем есть небольшой набор основных функций, а остальные вы можете добавлять при помощи расширений.

Но по мере роста вашей коллекции расширений производительность неизбежно пострадает.

Вы вообще оцениваете производительность расширения перед его установкой? Что делаете, если время загрузки VS Code растет? Поскольку статей на эту тему мне не встретилось, я думаю, что люди просто не знают, что можно и нужно делать в таких случаях.

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

Минимальные аппаратные и программные требования

Прежде чем мы перейдем к расширениям, давайте кратко поговорим о минимальных требованиях для запуска VS Code.

Компьютер со скромными характеристиками, купленный в последние несколько лет, должен без проблем запускать VS Code.

Железо

Минимальное оборудование, которое я рекомендую:

  • Процессор с тактовой частотой 1,6 ГГц или выше;
  • Не менее 1 ГБ оперативной памяти;
  • Не менее 200 МБ дискового пространства.

Операционные системы

VS Code был протестирован в следующих операционных системах:

  • OS X Yosemite и более поздние версии.
  • Windows 7 (с .NET Framework 4.5.2), 8.0, 8.1 и 10 (32-разрядная и 64-разрядная версии).
  • Linux (Debian): Ubuntu Desktop 14.04, Debian 7.
  • Linux (Red Hat): Red Hat Enterprise Linux 7, CentOS 7, Fedora 23.

Неофициальные сборки для Raspberry Pi и Chromebook

Джей Роджерс выпустил проект с открытым исходным кодом, который выполняет ночные сборки VS Code для Raspberry Pi и Chromebook.

«Я поддерживаю этот проект в течение нескольких лет. За это время он расширился от предоставления двоичных файлов для Pi до предоставления поддержки и инструментов для запуска VS Code на устройствах ARM низкого технического уровня. Без этого проекта такие устройства как Chromebook (составляющие около 60 % устройств в школах сейчас) не поддерживали бы VS Code».

Если вы хотите испытать эти сборки, вы можете следовать инструкциям, которые опубликовал Роджерс. Он проделал большую работу, чтобы сделать все как можно проще.

Не все расширения одинаково полезны

Расширения загружаются и выгружаются при разных условиях, которые определяет автор расширения. Определяются эти условия через «события активации», о которых мы поговорим позже.

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

Большинство расширений написано на TypeScript, но они также могут быть написаны на JavaScript. Расширения могут включать Node-модули в качестве зависимостей.

При желании вы можете уменьшить ваши исходные файлы, объединив их в один файл. Документация VS Code рекомендует делать это для сокращения времени загрузки, но многие расширения этого не делают. Этот выбор влияет на их производительность.

Расширения — это в основном проекты с открытым исходным кодом, написанные сторонними разработчиками. Качество кода в разных расширениях будет разным, да и уровень поддержки будет отличаться.

Расширения, написанные Microsoft, тоже не застрахованы от недостатков, но все же меньше им подвержены.

Критерии выбора расширения

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

Критерии выбора, предлагаемые мной, включают просмотр исходного кода. Не пугайтесь этого. Чтобы собрать ключевые факты, потребуется всего пара минут. Я покажу вам, как это делается!

1. Доступна ли уже эта функция в VS Code?

Я продемонстрировал, что многе популярные расширения вам не нужны, в статье «VS Code: вам не нужно это расширение». Чтобы узнать о конкретной функции, вы можете обратиться к документации VS Code.

2. Есть ли в расширении необходимые мне функции?

Чтобы узнать об этом, обратитесь к странице расширения в Visual Studio Marketplace.

3. Когда расширение загружено и активно?

Я подробно расскажу об этом в разделе «События активации». Чтобы узнать это заранее, нужно проверить package.json в исходном коде.

Вы можете запустить команду Developer: Startup Performance, чтобы увидеть события активации установленных расширений. Я вернусь к этой теме в разделе «Как проводить аудит эффективности».

4. Оптимизированы ли ресурсы?

Вам нужно проверить исходный код, чтобы узнать, использует ли он сборщик. Можно проверить package.json, чтобы посмотреть, есть ли в разделе сценариев этап предварительной сборки.

Файл с расширением VSIX — это сжатый архив файлов для кода и листинга на торговой площадке. Разработчики часто включают файлы, без которых можно и обойтись. Для исключения файлов есть файл .vscodeignore.

Количество файлов, содержащихся в VSIX, влияет на время холодной активации. Время холодной активации — это первый запуск расширения после его установки. Обычно этот запуск происходит медленнее, чем последующие. Я предполагаю, что это потому, что VSIX несжат и кеширован.

Так выглядит расширение Vetur, когда вы открываете его в 7Zip.

5. Сообщалось ли в последнее время о нерешенных проблемах с производительностью?

Вы можете обнаружить подобные проблемы во время проверки производительности расширения. Также стоит проверить issues в репозитории Git.

6. Есть ли в коде тесты?

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

7. Расширение активно поддерживается?

В разделе Project Details («Сведения о проекте») на странице расширения можно увидеть обзор активности общедоступного репозитория Git. В некоторых случаях расширение может быть «закончено», поэтому поддержка не будет важным фактором.

События активации

События активации — это события, которые запускают активацию расширения. Они определяют условия его загрузки и вызгрузки.

Автор расширения указывает эти условия в поле activateEvents файла package.json (Extension Manifest).

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

Это схема того, что и в каком порядке происходит при запуске VS Code. Она дает представление о хронологии событий, влияющих на то, когда вы можете начать взаимодействовать с редактором и использовать определенные расширения.

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

Событие «запуск»

Событие активации * активирует расширение при запуске VS Code. Эти расширения всегда будут активны, и это повлияет на время запуска VS Code.

"activationEvents": [
    "*"
]

В документации VS Code приведен такой совет:

«Чтобы обеспечить удобство работы конечного пользователя, используйте это событие активации в своем расширении только в том случае, если никакая другая комбинация событий активации не работает в вашем варианте использования».

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

Популярные расширения с этим событием активации: ESLint (11 млн установок), Live Server (7,4 млн установок), GitLens (6,5 млн установок), Beautify (5,4 млн установок), Bracket Pair Colorizer (3,6 млн установок), Git History (2,9 млн установок) ), Settings Sync (2 млн установок), indent-rainbow (1,1 млн установок).

Событие onStartupFinished

Расширение будет активировано через некоторое время после запуска VS Code. Похоже на событие активации *, но не замедляет запуск VS Code.

"activationEvents": [
    "onStartupFinished"
]

Популярные расширения с этим событием активации: Prettier (8,5 млн установок).

Событие onLanguage

Расширение активируется при открытии файла на определенном языке.

"activationEvents": [
    "onLanguage:json",
    "onLanguage:markdown",
    "onLanguage:typescript"
]

Событие onLanguage принимает в качестве значения идентификатор языка. Вы можете объявлять столько языков, сколько хотите.

Популярные расширения с этим событием активации: большинство расширений в категории «Programming Languages» («языки программирования») на торговой площадке Visual Studio Code имеют среди событий активации onLanguage. Если говорить более конкретно, Vetur (5,6 млн установок) — активируется только для Vue, YAML (4,3 млн установок) — активируется только для YAML, Better Comments (1,1 млн установок — активируется только для поддерживаемых языков.

Событие workspaceContains

Это расширение активируется, когда вы открываете папку, содержащую как минимум один файл, совпадающий с шаблоном.

"activationEvents": [
    "workspaceContains:**/package.json"
]

Событие onCommand

Это расширение активируется при вызове команды.

"activationEvents": [
        "onCommand:vscode-docker.compose.down",
        "onCommand:vscode-docker.compose.restart",
        "onCommand:vscode-docker.compose.up",
        ...
]

Прочие события активации

Полный список событий активации можно почитать в документации.

Последовательно ли устанавливаются события активации для расширений?

Нет!

Слишком много расширений используют событие активации *.

Вот как я бы оценил ситуацию для некоторых расширений, которые сам использовал:

Хорошо: Vetur, YAML, Better Comments.

Плохо:

Prettier: было бы лучше нацеливаться только на поддерживаемые языки.

Markdown All in One: он активен, когда открыт markdown-файл или рабочее пространство содержит файл README.md. Последнее мне кажется ненужным.

Ужасно: все расширения с событием активации *, упомянутым выше.

Как сборка может влиять на производительность расширения?

Очень сильно!

Джон Папа рассказал об этом в своей статье «Is Your VS Code Extension Slow? Here’s How to Speed it Up!».

Он раскрывает результаты исследования двух расширений Microsoft:

  1. Azure Account: сборка сокращает время активации на 50%. Размер расширения был уменьшен с 6,2 МБ до 840 КБ за счет сборки и исключения дополнительных файлов (в файле .vscodeignore).
  2. Docker: сборка уменьшила время активации с 3,5 до 2 секунд. Также следует учитывать время холодной активации, которое, как правило, выше, чем время горячей активации. Время холодной активации снизилось с целых 20 секунд до 2 секунд.

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

Как проводить аудит производительности

Чтобы получить базовую статистику о запущенных расширениях, можно запустить команду Developer: Show Running Extensions. Она сортирует расширения от самого длительного до самого короткого времени активации. Если расширение загружается при запуске, время будет называться Startup Activation.

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

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

Вы можете проверить производительность запуска, выполнив команду Developer: Startup Performance. Вам откроется документ с подробной статистикой по таким темам:

  • информация о системе,
  • оценки производительности,
  • статистика активации расширений,
  • статистика загрузчика для модулей и т. д.

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

Раздел «Extension Activation Stats» («Статистика активации расширений») дает более подробный обзор производительности расширений. Это очень полезно для просмотра событий активации без проверки исходного кода расширения.

Вы можете видеть, что VS Code при запуске также загружает свои собственные «основные» расширения для Git, Emmet и некоторых других. 🧐Следите за тем, чтобы список расширений, загружаемых при запуске, не становился слишком длинным!

Конец первой части. Часть вторая.

[customscript]techrocks_custom_after_post_html[/customscript]

[customscript]techrocks_custom_script[/customscript]

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Прокрутить вверх