Оптимизация производительности с GitHub Copilot

Разработка программного обеспечения с GitHub Copilot

Thalia Barrera

AI Engineering Curriculum Manager, DataCamp

Скрытое замедление

 

nanobanana: half: Иллюстрация с разделением на две части: слева — быстрое приложение в виде ракеты, справа — медленный вращающийся индикатор загрузки, плоский векторный стиль

 

Проблемы производительности:

  • Не выявляются модульными тестами
  • Не вызывают немедленных сбоев

 

📈 Код работает корректно, но не масштабируется

Разработка программного обеспечения с GitHub Copilot

Узкое место на практике

 

def find_common(list1, list2):
    common = []
    for item in list1:
        for item2 in list2:
            if item == item2:
                common.append(item)
    return common

 

  • Код работает нормально на малых данных
  • 1 миллион элементов → 1 триллион сравнений
  • Алгоритм $O(n^2)$!

 

Роняет продакшн в час пик

Разработка программного обеспечения с GitHub Copilot

[screencast]

Разработка программного обеспечения с GitHub Copilot

[screencast]

Разработка программного обеспечения с GitHub Copilot

Укажите Copilot направление оптимизации

nanobanana: half: Панель производительности со спидометрами и метриками, отображающими различные показатели оптимизации, плоская векторная иллюстрация на чистом фоне

 

  • Скорость → быстрые алгоритмы, кэширование, пакетная обработка
  • Память → освобождение ресурсов, потоковая обработка, генераторы
  • Оба аспекта → полный анализ производительности
Разработка программного обеспечения с GitHub Copilot

Эффективные запросы для оптимизации

 

Точечная оптимизация

Optimize #selection for performance and reduce time complexity

Review #selection for memory leaks

 

Сканирование всей кодовой базы

@workspace find functions with nested loops over large collections

Разработка программного обеспечения с GitHub Copilot

[screencast]

Разработка программного обеспечения с GitHub Copilot

[screencast]

Разработка программного обеспечения с GitHub Copilot

Встройте требования к производительности в каждую подсказку

 

.github/copilot-instructions.md

## Performance standards
- Prefer set or dict lookups over nested loops
- Use context managers for files, connections, and sockets
- Avoid loading entire datasets into memory, use generators or streaming

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

Разработка программного обеспечения с GitHub Copilot

Давайте потренируемся!

Разработка программного обеспечения с GitHub Copilot

Preparing Video For Download...