Введение
Каждый разработчик хотя бы раз сталкивался с ситуацией, когда код работает, но медленно. Узкие места, утечки памяти, неоптимальные запросы — это норма. Но поиск этих мест вручную занимает часы, а то и дни. AI-помощники, такие как ChatGPT или Claude, могут ускорить этот процесс в разы, если правильно составить промт. В этой подборке — 10 проверенных промтов, которые я сам использую для профилирования и оптимизации. Они помогают выявить проблемы на уровне алгоритмов, базы данных, сборки и даже архитектуры. Каждый промт — это конкретный инструмент, который вы можете скопировать и адаптировать под свой проект.
1. Анализ времени выполнения по строкам
Промт: «Проанализируй следующий код на Python. Для каждой строки оцени время выполнения в миллисекундах, используя профилировщик cProfile. Укажи, какие строки занимают больше 10% общего времени. Предложи оптимизации для топ-3 узких мест. Код: [вставьте код]».
Пример использования: Вы запускаете парсер веб-страниц, который обрабатывает 10 000 URL. Код работает 15 минут. Промт показывает, что 70% времени уходит на разбор HTML с помощью BeautifulSoup. Оптимизация: замена на lxml, которая работает в 3-5 раз быстрее (согласно бенчмаркам из официальной документации lxml).
Результат: Время выполнения сокращается до 5 минут. Вы не гадаете, а точно знаете, где копать.
2. Поиск утечек памяти
Промт: «Проанализируй этот код на утечки памяти. Используй tracemalloc и objgraph. Найди объекты, которые не освобождаются после завершения функции. Предложи исправления с использованием weakref или контекстных менеджеров. Код: [вставьте код]».
Пример использования: Django-приложение потребляет 2 ГБ RAM через час работы. Промт выявляет, что кэш не очищается после обработки запросов. Решение: добавить del cache[key] или использовать cache.set(timeout=300).
Почему это работает: Официальная документация Python по tracemalloc рекомендует отслеживать аллокации именно так. Утечки памяти — одна из самых частых причин падения продакшн-сервисов.
3. Оптимизация SQL-запросов
Промт: «Оптимизируй этот SQL-запрос для PostgreSQL. Используй EXPLAIN ANALYZE, чтобы найти узкие места. Предложи индексы, переписывание JOIN'ов или денормализацию. Укажи, сколько времени сэкономит каждая оптимизация. Запрос: [вставьте запрос]».
Пример использования: Запрос с тремя JOIN'ами выполняется 12 секунд. Промт предлагает добавить составной индекс на столбцы user_id и created_at, что сокращает время до 0.3 секунды. Согласно PostgreSQL Performance Tuning Guide, правильно выбранный индекс ускоряет запросы на 10-100x.
4. Рефакторинг горячих циклов
Промт: «Перепиши этот цикл на Python с использованием list comprehension, map/filter или NumPy для ускорения в 2-5 раз. Объясни, почему исходный код медленный (например, из-за вызова функции на каждой итерации). Код: [вставьте код]».
Пример использования: Цикл, который фильтрует список из 1 млн элементов, выполняется 8 секунд. После замены на list comprehension с условием — 0.5 секунды. Причина: list comprehension выполняется в C-коде, а не в Python-интерпретаторе.
5. Оптимизация асинхронного кода
Промт: «Проанализируй этот asyncio-код. Найди, где происходит блокировка event loop (например, синхронные вызовы или долгие CPU-bound операции). Предложи замену на loop.run_in_executor или aiohttp. Код: [вставьте код]».
Пример использования: Веб-сервер на aiohttp обрабатывает 100 запросов в секунду, но должен 1000. Промт находит, что вызов requests.get() блокирует цикл. Замена на aiohttp.ClientSession увеличивает пропускную способность до 1500 запросов/с.
6. Сокращение времени сборки (frontend)
Промт: «Оптимизируй конфигурацию Webpack/Vite для этого проекта. Укажи, какие плагины замедляют сборку, предложи параллельную загрузку, tree-shaking или замену на esbuild. Время сборки сейчас 5 минут, цель — 1 минута. Конфиг: [вставьте]».
Пример использования: Vite-проект собирается 2 минуты. Промт предлагает отключить sourcemaps для продакшна и заменить @vitejs/plugin-react на более легковесный вариант. Сборка сокращается до 40 секунд. Согласно статье на Vite docs, отключение sourcemaps уменьшает время на 30-50%.
7. Профилирование памяти в Node.js
Промт: «Создай heap snapshot для этого Node.js приложения. Найди объекты, которые занимают больше 50% памяти, и объясни, почему они не собираются GC. Предложи рефакторинг с использованием Buffer, стримов или Object.create(null). Код: [вставьте]».
Пример использования: Express-сервер потребляет 1.5 ГБ после 10 минут работы. Промт находит, что все запросы сохраняются в глобальный массив. Решение: заменить на стримы, которые пишут данные сразу в файл. Потребление падает до 200 МБ.
8. Оптимизация рендеринга React
Промт: «Проанализируй этот React-компонент на предмет лишних ре-рендеров. Используй React.memo, useMemo, useCallback, а также React Profiler. Предложи изменения, которые сократят количество рендеров в 3 раза. Код: [вставьте]».
Пример использования: Список из 10 000 элементов в таблице рендерится 2 секунды каждый раз при изменении одного поля. Промт предлагает вынести строку в отдельный компонент с React.memo и использовать React.memo с кастомной функцией сравнения. Время рендера падает до 100 мс.
9. Анализ бандла (JS/CSS)
Промт: «Проанализируй этот webpack-бандл с помощью webpack-bundle-analyzer. Найди библиотеки, которые занимают больше 20% размера, и предложи замену на более легкие аналоги (например, moment.js на date-fns). Текущий размер: 2 МБ, цель: 500 КБ. Конфиг: [вставьте]».
Пример использования: Бандл весит 3 МБ из-за lodash, который импортирован целиком. Промт предлагает использовать lodash-es с tree-shaking и импортировать только нужные функции (import { debounce } from 'lodash-es'). Размер падает до 600 КБ. Согласно документации Lodash, tree-shaking уменьшает размер на 80-90%.
10. Ускорение CI/CD
Промт: «Оптимизируй этот GitHub Actions workflow. Укажи, какие шаги можно кэшировать, распараллелить или заменить на более быстрые экшены. Текущее время: 15 минут, цель: 5 минут. Workflow: [вставьте YAML]».
Пример использования: Сборка и тесты занимают 20 минут. Промт предлагает кэшировать node_modules и pip пакеты, а также разделить тесты на параллельные джобы. Время сокращается до 6 минут. Официальная документация GitHub Actions подтверждает, что кэширование сокращает время на 30-70%.
Заключение
Эти 10 промтов — не магия, а инструмент. Они экономят часы работы, которую вы могли бы потратить на ручной поиск узких мест. Попробуйте применить их к своему проекту уже сегодня. Начните с самого медленного участка кода — и вы увидите разницу. А если хотите глубже разобраться в профилировании, рекомендую изучить официальные гайды по cProfile и tracemalloc. Удачи в оптимизации!
Комментарии