Введение
Каждый разработчик сталкивался с ситуацией, когда код работает, но медленно. Профилирование и ручной рефакторинг требуют времени, а AI может стать ассистентом, который ускорит поиск узких мест. Я собрал 15 проверенных промтов, которые использую в своей работе ежедневно. Они подходят для ChatGPT, Claude, GitHub Copilot и других LLM. Все примеры — из реальных проектов: от бэкенда на Go до фронтенда на React. Попробуйте — и оптимизация перестанет быть гаданием.
1. Анализ временной сложности
Промт:
Оцени временную сложность следующего кода. Если она выше O(n log n), предложи оптимизированную версию. Объясни, почему новый вариант быстрее.
Пример использования:
Код — функция поиска дубликатов через вложенные циклы (O(n²)). AI предложит использовать HashSet (O(n)).
Код до:
def find_duplicates(arr):
duplicates = []
for i in range(len(arr)):
for j in range(i+1, len(arr)):
if arr[i] == arr[j] and arr[i] not in duplicates:
duplicates.append(arr[i])
return duplicates
Код после (предложение AI):
def find_duplicates(arr):
seen = set()
duplicates = set()
for x in arr:
if x in seen:
duplicates.add(x)
else:
seen.add(x)
return list(duplicates)
Этот промт помогает сразу выявить алгоритмическую неэффективность.
2. Поиск узких мест с помощью профилирования
Промт:
Ниже — вывод профилировщика (cProfile/py-spy) для Python-скрипта. Укажи топ-3 функции, которые потребляют больше всего времени, и предложи конкретные оптимизации для каждой.
Пример:
Передаёшь текст вывода профилировщика. AI анализирует, где str конкатенация вместо join, где излишние вызовы len() в цикле, и даёт исправления.
Почему работает: LLM обучены на множестве кейсов профилирования, они знают типичные паттерны тормозов.
3. Оптимизация запросов к базе данных
Промт:
У меня есть SQL-запрос, который выполняется 5 секунд. EXPLAIN ANALYZE прилагается. Предложи индексы, рефакторинг или денормализацию для ускорения до <200 мс. Учти, что база — PostgreSQL 15.
Пример:
Запрос с JOIN на большую таблицу без индекса по внешнему ключу. AI предлагает создать индекс, переписать с подзапросом или использовать материализованное представление.
4. Бенчмарк-генератор
Промт:
Напиши на Go бенчмарк-тест для сравнения двух реализаций функции ParseInt: через strconv.Atoi и через fmt.Sscanf. Выведи результаты в формате ns/op и allocs/op.
Пример:
AI генерирует _test.go файл с корректными бенчмарками, запускаемыми через go test -bench=..
5. Рефакторинг с сохранением семантики
Промт:
Перепиши этот метод так, чтобы он выполнялся не более 50 мс при входных данных объёмом 10 000 элементов. Сохрани интерфейс и функциональность. Если возможно, используй многопоточность.
Пример:
Обработка списка строк с регулярными выражениями — AI заменит на компилированные паттерны и параллельную обработку через goroutines.
6. Анализ использования памяти
Промт:
Проанализируй этот класс на предмет утечек памяти (память растёт с каждым вызовом метода). Предложи исправления с учётом сборки мусора в C#.
Пример:
Класс подписывается на события, но не отписывается. AI добавляет Dispose и использует WeakReference.
7. Оптимизация рендеринга в React
Промт:
Этот React-компонент ререндерится при каждом изменении состояния родителя, хотя его пропсы не меняются. Добавь React.memo, useMemo и useCallback только там, где это действительно нужно. Объясни каждое изменение.
Пример:
Компонент списка с filter-функцией. AI оборачивает функцию в useCallback, а результат фильтрации — в useMemo.
8. Оптимизация циклов в JavaScript
Промт:
Дан массив из 100 000 объектов. Нужно быстро получить сумму поля 'price' для тех, у кого 'active' === true. Предложи самый быстрый вариант на ES2024 (for, reduce, for...of, forEach) и объясни, почему.
Пример:
AI может показать, что обычный for с локальной переменной работает быстрее декоративных методов, или наоборот — reduce с typed array.
9. Выбор структур данных
Промт:
У меня операция: часто искать элемент по ключу и редко добавлять новые. Какая структура данных в Java подойдёт лучше всего? Напиши пример с HashMap против TreeMap.
Пример:
AI объяснит, что HashMap даёт O(1) в среднем, а TreeMap — O(log n). Если порядок не важен, выбираем HashMap.
10. Кэширование и мемоизация
Промт:
Эта функция вычисляет факториал рекурсивно без кэша. Добавь мемоизацию (lru_cache или ручной словарь) и сравни производительность до/после на n=1000.
Пример:
AI генерирует код с functools.lru_cache и показывает, что время падает с экспоненциального до O(n).
11. Асинхронность и параллелизм
Промт:
Скрипт на Python выполняет 100 HTTP-запросов последовательно. Перепиши его с использованием asyncio и aiohttp, сохранив обработку ошибок. Добавь Semaphore для ограничения конкурентности до 10.
Пример:
AI заменяет requests на aiohttp, добавляет asyncio.gather и asyncio.Semaphore.
12. Оптимизация билда и сборки
Промт:
Время сборки webpack-проекта — 3 минуты. Предложи 5 конкретных шагов, как ускорить до <1 минуты: замена лоадеров, параллелизация, кэширование.
Пример:
AI советует thread-loader, cache-loader, swc-loader вместо babel-loader, и разделение кода.
13. Оптимизация сетевых запросов
Промт:
API возвращает 50 полей, но клиенту нужны только 5. Предложи вариант с GraphQL (указать выборочные поля) или bff-слой, который агрегирует и сокращает ответ. Сравни размер трафика.
Пример:
AI демонстрирует graphql-запрос с выделением полей и оценивает экономию в байтах.
14. Оптимизация на уровне ОС
Промт:
Серверное приложение на Linux использует 100% CPU при 100 RPS. Выполни strace и perf top. Какие syscall жрут больше всего? Предложи настройки ядра или альтернативные системные вызовы (epoll вместо select).
Пример:
AI анализирует вывод strace и указывает, что poll — узкое место, советует перейти на epoll.
15. Оптимизация по рекомендациям Google PageSpeed
Промт:
У меня оценка PageSpeed Insights 45/100. По пунктам: LCP 8 с, TBT 500 мс, CLS 0.3. Дай конкретные шаги для каждого показателя. Предложи код (lazy load, preload шрифтов, resizing images).
Пример:
AI генерирует IntersectionObserver для отложенной загрузки, вставляет атрибуты loading="lazy", предлагает оптимизировать изображения через srcset.
Заключение
Эти промты — не волшебство, а инструменты. Они экономят часы ручного анализа, если правильно сформулировать задачу и критически оценить ответ. Советую начать с промта #2 (профилирование) — он часто даёт самый быстрый выигрыш. Экспериментируйте, адаптируйте под свой стек, и скоро оптимизация станет рутинной задачей, которую вы делегируете AI.
Попробуйте любой промт уже сегодня — и увидите разницу в производительности.
Комментарии