Однажды я поймала себя на мысли:

А почему VSCode так тормозит? ?

Сначала я просто перезапускала редактор и мирилась с этим.
Но в какой-то момент я поняла: хватит терпеть — надо разобраться по-настоящему.


Подход к расследованию

Я решила действовать так же, как и при оптимизации производительности любого софта:

  1. Определить цель

  2. Измерить

  3. Проанализировать

  4. Придумать решение

  5. Реализовать и проверить эффект

Шаг 1. Определяю цель

Что именно значит «VSCode тормозит»?
У меня это выглядело так:

  • Редактор полностью зависает (мышь не двигается)

  • Логи коммитов не отображаются

  • Copilot перестаёт подсказывать

? Цель: устранить эти проблемы и сделать работу комфортной.

Шаг 2. Измерения

В VSCode есть несколько встроенных инструментов для анализа производительности:

  • Startup Performance — показывает время запуска редактора

  • Developer Tools — проверка ошибок в UI и сетевых запросах

  • Process Explorer — мониторинг CPU и памяти по процессам

Startup Performance

Открывается через Ctrl+Shift+PStartup Performance.
Полезно при медленном старте, но у меня запуск был нормальный → исключаю.

Developer Tools

Меню Help > Toggle Developer Tools.
Позволяет смотреть Console и Network на наличие ошибок.
У меня всё было чисто.

Process Explorer

Меню Help > Open Process Explorer.
Показывает загрузку CPU/памяти каждым процессом.

? Именно здесь я увидела, что процесс расширений загружает 99% CPU!

(У меня не осталось скриншота с загрузкой CPU на 99%, так как изначально я не планировала писать статью. Поэтому приведённое ниже изображение — только для примера.)
(У меня не осталось скриншота с загрузкой CPU на 99%, так как изначально я не планировала писать статью. Поэтому приведённое ниже изображение — только для примера.)

Шаг 3. Анализ

Было ясно, что виновато какое-то расширение.
Я увидела в Process Explorer, что процесс расширений грузит процессор почти на 100%.
Но сам Process Explorer не показывает, какое именно расширение вызывает проблему.
Нужно было пойти дальше и найти способ локализовать виновника.

Для этого я использовала Extension Bisect.

Extension Bisect

Штатный инструмент VSCode для поиска «плохого» расширения:

  1. Меню Help > Start Extension Bisect

  2. VSCode отключает половину расширений

  3. Я проверяю — проблема есть или нет

  4. Повторяю шаги, пока не останется одно расширение

? В моём случае виновницей оказалось расширение Rails.

Шаг 4. Решение

Расширение Rails предоставляет сниппеты, переходы и автодополнение.
Но в моей конфигурации оно было не нужно и конфликтовало с другими подсказками.

? Я просто удалила его.

Шаг 5. Проверка эффекта

После удаления:

  • Загрузка CPU упала с 99% до 10%

  • Редактор заметно ускорился

  • Работать стало комфортно ✨


Выводы

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

  • Встроенные инструменты VSCode очень помогают:

    • Process Explorer

    • Extension Bisect

  • Расширения стоит выбирать осознанно, а не «потому что кто-то посоветовал».


Заключение

Если у вас VSCode вдруг начал «тормозить» или зависать —
не спешите удалять всё подряд или винить железо.

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

Надеюсь, мой опыт окажется полезным ?

Комментарии (4)


  1. Cheater
    26.09.2025 17:40

    Extension Bisect
    Штатный инструмент VSCode для поиска "плохого" расширения

    В смысле "штатный"? Это сторонний плагин из маркетплейса, такой же точно как и ваш Rails.

    Для определения времени выполнения дочерних процессов плагин вообще не нужен, есть системные инструменты (в Linux по крайней мере), которым всё равно, кто создаёт дочерний процесс, - VScode или обычный шелл:

    #!/bin/zsh
    
    # Simulate a slow subprocess
    
    echo Parent started
    sleep 1
    (echo Child started; sleep 5; echo Child finished)
    echo Parent finished
    
    $ strace -tt -e trace=clone,kill ./test.sh
    Parent started
    18:19:00.468526 clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f82457765d0) = 179376
    18:19:01.470227 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=179376, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
    18:19:01.471179 kill(-179376, 0)        = -1 ESRCH (No such process)
    18:19:01.472054 clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f82457765d0) = 179377
    Child started
    Child finished
    18:19:06.475428 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=179377, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
    18:19:06.476107 kill(-179377, 0)        = -1 ESRCH (No such process)
    Parent finished
    


  1. winkyBrain
    26.09.2025 17:40

    В смысле "штатный"? Это сторонний плагин из маркетплейса, такой же точно как и ваш Rails.

    Можете ссылку дать? А то есть ощущение, что вы врёте. У меня функционал есть из коробки, просто не в меню, а в паллете


  1. vadvalskiy
    26.09.2025 17:40

    эм у майков все работает с божьей помощью у меня Win10 то и дело зависает проводник пару раз крашился + права администратора прям видно что винда зависает на какое-то время при чем на достаточно долгое время + в компиляторах MSVC начиная с v120 VS2013 (хотя выще я утверждать не буду я не тестировал) есть ооочень серьезные проблемы я нашёл толи есть какие-то проблемы с move semantics то ли ещё с чем-то как пример в компиляторах msvc есть дубли заголовков которые лежат CRT/src а есть в дефолтном которые ты обычно подключаешь так вот они сильно различаться частая проблема старого кода который застал еще Visual SourceSafe так вот суть такова есть определенный код который работает в VC71 VC80 VC90 VC100 но не работает в VC120 компилятор то выбивает ошибку то крашится то иногда собирает прога не работает при том что это тоже самое работает без изменений в компиляторах GCC


  1. Octagon77
    26.09.2025 17:40

    Круто. И характер. Я бы, 100%, даже не запуская top, первым делом отключил половину расширений, потом вторую половину. Типа вайб-кодинг, только без вайб кодинга...