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

А почему 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 вдруг начал «тормозить» или зависать —
не спешите удалять всё подряд или винить железо.

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

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

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


  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. owlivkks
      26.09.2025 17:40

      Да, такое расширение действительно есть. Ссылка

      Но в моем случае работает немного по-другому: вместо поиска в меню Help -> Start Extension Bisect я открывал Палитру команд (F1 или Ctrl + Shift + P) и вводил "Start Extension Bisect". Работает так, как заявлено: отрубает расширения (но в моем случае отрубило все)

      Будет еще предупреждающее окно:

      Перед запуском команды
      Перед запуском команды

      Если нажать Start Extension Bisect, VS Code перезапустится и в правом нижнем углу появится следующее (это окно закрывать не стоит, иначе придется перезапустить VS Code):

      Расширение отработало успешно!
      Расширение отработало успешно!

      В моем случае отрубились все расширения (в том числе и сам Extension Bisect):

      Отрубились все расширения
      Отрубились все расширения

      Чтобы заново запустить все расширения, нужно нажать Stop Bisect (окошко на картинке выше).
      Дальше нужно нажимать "I can't reproduce", чтобы постепенно включать расширения. Если вы нашли пробему, нужно нажать "I can reproduce" (хотя разницы между последними 2 кнопками я не нашел)

      Это разширение работает только на 1 окно VS Code. Остальные останутся целы.


  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. IvanG
      26.09.2025 17:40

      Понимаю вашу боль, но здесь оно не к месту, проблема в расширении а не вскод


  1. Octagon77
    26.09.2025 17:40

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


  1. March228
    26.09.2025 17:40

    Пишу код в блокноте и у меня ничего не зависает.


    1. noncinque
      26.09.2025 17:40

      Пишу код в вим и у меня ничего не зависает.


  1. APh
    26.09.2025 17:40

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

    Я больше скажу: устанавливайте только те программы, которыми пользуетесь.


  1. GreenMan1899
    26.09.2025 17:40

    А кто-то сталкивался с полным зависанием при глобальном поиске по всему проекту?