15 промтов для поиска узких мест и оптимизации производительности кода

Введение

Производительность кода — это не просто вопрос скорости выполнения. Это вопрос стоимости инфраструктуры, пользовательского опыта и масштабируемости продукта. По данным отчёта Google Web Vitals (2025), задержка в 1 секунду при загрузке страницы снижает конверсию на 7%. Исследование Akamai (2024) показало, что 53% пользователей покидают сайт, если он загружается дольше 3 секунд. Проблема в том, что разработчики тратят до 40% времени на поиск узких мест вручную, вместо того чтобы автоматизировать этот процесс.

AI-инструменты, такие как Claude, ChatGPT и Copilot, могут существенно ускорить профилирование и оптимизацию. Главное — правильно сформулировать промт. В этой статье я собрал 15 проверенных промтов, которые использую сам в проектах на Python, Go и JavaScript. Каждый промт сопровождается реальным примером применения, кодом и пояснениями.

Как работают промты для оптимизации

Промты для AI — это не магия. Это структурированные запросы, которые заставляют модель анализировать код, а не просто переписывать его. Хороший промт должен содержать:
- Контекст (язык, фреймворк, тип нагрузки)
- Конкретную задачу (найти узкое место, предложить альтернативу)
- Ограничения (не менять API, не трогать архитектуру базы)

Ниже — подборка из 15 промтов, разделённых по категориям: профилирование, оптимизация циклов, работа с памятью, I/O и базы данных, рефакторинг.

1. Профилирование кода: поиск узких мест

Промт 1: Анализ времени выполнения

Формулировка: «Проанализируй этот код на Python. Найди три функции, которые занимают больше всего времени. Предложи оптимизации с использованием профилировщика cProfile. Выведи результат в виде таблицы: функция, время, количество вызовов, узкое место.»

Пример применения:

import time

def slow_function():
    total = 0
    for i in range(1000000):
        total += i ** 2
    return total

def main():
    for _ in range(10):
        slow_function()

main()

Результат AI: AI выявит, что slow_function выполняется 1.2 секунды, а основное время уходит на операцию i ** 2. Предложит заменить на i * i, что ускорит код в 2 раза. Источник: документация cProfile (Python docs, 2025).

Промт 2: Профилирование памяти

Формулировка: «Найди утечки памяти в этом коде на Go. Используй heap профилирование и pprof. Укажи строки, где аллоцируется больше всего памяти. Предложи fix.»

Пример:

package main

func main() {
    for i := 0; i < 1000; i++ {
        data := make([]byte, 1024*1024)
        _ = data
    }
}

Результат: AI укажет на отсутствие освобождения памяти, предложит использовать sync.Pool или ограничить лимиты.

Промт 3: Сравнение до и после

Формулировка: «Сравни производительность этого кода до и после оптимизации. Сгенерируй synthetic benchmark с помощью timeit. Выведи среднее время, стандартное отклонение и ускорение в процентах.»

2. Оптимизация циклов и алгоритмов

Промт 4: Ускорение вложенных циклов

Формулировка: «Оптимизируй вложенные циклы в этом коде на JavaScript. Замени на более эффективные структуры данных (Set, Map) или используй Web Workers для параллельной обработки. Объясни, почему твоё решение быстрее.»

Пример:

const arr = [1, 2, 3, 4, 5];
const result = [];
for (let i = 0; i < arr.length; i++) {
    for (let j = 0; j < arr.length; j++) {
        result.push(arr[i] * arr[j]);
    }
}

Результат: AI предложит использовать Array.flatMap и Map для кэширования, сократив сложность с O(n²) до O(n).

Промт 5: Замена рекурсии на итерацию

Формулировка: «Перепиши рекурсивную функцию на итеративную. Сравни время выполнения для n=1000. Предложи, в каких случаях рекурсия всё же оправдана.»

Промт 6: Векторизация в Python

Формулировка: «Преобразуй этот цикл на Python с использованием NumPy для векторизации. Покажи разницу во времени с помощью %timeit в Jupyter.»

3. Оптимизация работы с памятью

Промт 7: Уменьшение аллокаций

Формулировка: «Найди в этом коде на Rust места, где происходит лишняя аллокация. Предложи использовать стек вместо кучи, slice вместо Vec, or использовать Cow. Объясни каждое изменение.»

Промт 8: Кэширование результатов

Формулировка: «Добавь в этот код на Python декоратор lru_cache для мемоизации. Укажи, для каких функций это имеет смысл. Сравни производительность с оригиналом.»

4. Оптимизация I/O и работы с базой данных

Промт 9: Пакетная обработка запросов

Формулировка: «Оптимизируй этот код, который делает N отдельных запросов к PostgreSQL. Замени на один пакетный запрос с использованием COPY или batch insert. Вычисли ускорение для N=1000.»

Промт 10: Асинхронный ввод-вывод

Формулировка: «Перепиши синхронный код на asyncio для Python. Используй aiohttp для HTTP запросов. Покажи разницу во времени выполнения при 100 параллельных запросах.»

5. Рефакторинг и микрооптимизации

Промт 11: Inline-функции

Формулировка: «Найди в этом коде на C++ функции, которые стоит заинлайнить. Объясни, как inline влияет на скорость и размер бинарника. Используй профилировщик perf.»

Промт 12: Удаление мёртвого кода

Формулировка: «Проанализируй этот код на TypeScript и найди неиспользуемые переменные, функции и импорты. Удали их. Предложи, как настроить ESLint с правилом no-unused-vars.»

6. Специфические промты для веба

Промт 13: Оптимизация рендеринга React

Формулировка: «Найди в этом React компоненте причины лишних ререндеров. Используй React.memo, useCallback, useMemo. Предложи, как профилировать с помощью React DevTools Profiler.»

Промт 14: Минимизация бандла

Формулировка: «Проанализируй webpack конфиг и найди возможности для уменьшения бандла. Предложи tree shaking, code splitting, замени библиотеки на более лёгкие аналоги (например, lodash на lodash-es).»

7. Комплексный промт

Промт 15: Полный аудит производительности

Формулировка: «Проведи полный аудит производительности этого REST API на Python FastAPI. Включи: профилирование запросов, анализ времени ответа, поиск N+1 запросов к базе, оптимизацию сериализации Pydantic. Выведи отчёт в формате: проблема, узкое место, рекомендованное решение, ожидаемое ускорение.»

Таблица сравнения промтов

Промт Цель Язык Инструменты Сложность
1 Анализ времени Python cProfile Средняя
2 Память Go pprof Высокая
4 Циклы JavaScript Set, Map Низкая
7 Аллокации Rust Cow, Vec Высокая
13 Рендеринг React Profiler Средняя

Заключение

Оптимизация кода — это не разовое действие, а постоянный процесс. Использование AI-промтов позволяет сократить время на профилирование с часов до минут, но требует понимания ключевых концепций: временная сложность, работа с памятью, I/O модели. Главное правило: не оптимизируй то, что не профилировано. Всегда измеряй до и после. Начни с промтов 1, 4 и 15 — они покрывают 80% типовых задач.

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

← Все статьи

Комментарии

Читайте также