Разработчик обнаружил, что скрытый поиск через npx добавлял примерно 10 секунд к каждому шагу Claude Code, а замена этого поиска на глобальную установку сократила время каждого взаимодействия на шесть секунд.
Почему задержка имела значение
Claude Code перемещается по монорепозиторию с десятками компонентов, индексирует символы, сохраняет транскрипты в Postgres и отправляет отчеты об ошибках. Рабочий процесс кажется плавным, пока ответы модели не начинают запаздывать. Проверка состояния (health check) выявила несколько неэффективных мест и один дорогостоящий сетевой вызов.
Что выявила проверка состояния
- Дублирующиеся установки — нативный лаунчер и устаревшая версия npm-global сосуществовали. Удаление устаревшей копии устранило ненужный поиск по путям.
- Поврежденный файл агента — файл без описания дублировал имя валидного файла, из-за чего Claude Code игнорировал его. Удаление поврежденной записи устранило путаницу.
- Неиспользуемые расширения — плагин и MCP-сервер, которые никогда не запускались, были отключены, что уменьшило объем ресурсов, потребляемых во время выполнения.
- Раздутые файлы «CLAUDE.md» — эти файлы дублировали информацию, уже присутствующую в коде (например, команды сборки), увеличивая объем данных, отправляемых модели. После их сокращения остался только необходимый контекст.
Эта очистка помогла, но самая большая победа была достигнута благодаря Stop hook, который запускается после каждого ответа модели.
Скрытый «налог» на npx
Stop hook выполняет шесть отдельных команд, каждая из которых имеет префикс npx -y. Флаг -y заставляет npx проверять наличие более новой версии в реестре npm перед выполнением команды, что инициирует сетевой запрос. Каждый поиск занимал в среднем 1,6 секунды, поэтому шесть вызовов добавляли около 10 секунд к каждому шагу. На практике общая задержка хука составляла 12 секунд, с периодическими скачками до 113 секунд при сбоях в сети.
Простое решение
Замена вызовов npx на глобально установленный бинарный файл устранила поиск в реестре:
- До:
npx -y @invariance/gps→ 1,6 с на вызов - После:
gps(установлен глобально) → 0,7 с на вызов
Это изменение сократило время выполнения Stop hook примерно на 6 секунд за шаг и устранило огромные скачки задержки, вызванные удаленной проверкой.
На что обратить внимание в дальнейшем
- Тайминг хуков — добавьте инструментарий для любых пользовательских хуков, чтобы выявлять задержки до того, как они начнут мешать пользователям.
- Гигиена зависимостей — регулярно удаляйте дублирующиеся установки и неиспользуемые расширения.
- Конфигурационные файлы — держите «CLAUDE.md» компактными; предоставляйте только ту информацию, которую модель не может вывести самостоятельно.
Урок прост: автоматизация может скрывать дорогостоящие технические механизмы. Быстрая проверка состояния может выявить скрытые сетевые вызовы, которые превращают плавного ИИ-ассистента в неповоротливого.
Вывод: Если Claude Code кажется медленным, замерьте время работы хуков и устраните любые поиски через npx; глобальная установка может сэкономить секунды на каждом шаге и сохранить плавность вашего процесса разработки.
