{"meta":{"title":"Рефакторинг для оптимизации производительности","intro":"Копилот Чат может предложить способы ускорения медленно выполняющегося кода.","product":"GitHub Copilot","breadcrumbs":[{"href":"/ru/copilot","title":"GitHub Copilot"},{"href":"/ru/copilot/tutorials","title":"Учебники"},{"href":"/ru/copilot/tutorials/copilot-chat-cookbook","title":"Кулинарная книга чата GitHub Copilot"},{"href":"/ru/copilot/tutorials/copilot-chat-cookbook/refactor-code","title":"Рефакторинг кода"},{"href":"/ru/copilot/tutorials/copilot-chat-cookbook/refactor-code/refactor-for-optimization","title":"Рефакторинг для оптимизации"}],"documentType":"article"},"body":"# Рефакторинг для оптимизации производительности\n\nКопилот Чат может предложить способы ускорения медленно выполняющегося кода.\n\nСуществующий код может работать правильно, но неэффективным, что приводит к узким местам производительности. Примеры программирования, которые могут негативно повлиять на производительность, включают неэффективные циклы, ненужные вычисления и чрезмерное выделение памяти.\n\nКопилот Чат может определять точки производительности и предлагать стратегии рефакторинга, такие как оптимизация структур данных (например, использование хэш-карт вместо массивов), сокращение избыточных вычислений и улучшение алгоритмической эффективности. Кроме того, он может рекомендовать механизмы кэширования или операции параллелизации для повышения производительности.\n\n## Пример сценария\n\nСледующий код Python выводит каждый 1000-й прайм-номер до 10 000-го праймера. Он включает таймер и выводит время выполнения кода в качестве последней строки выходных данных. Программа занимает несколько секунд.\n\n```python id=slow-prime\nimport time\n\ndef is_prime(n):\n    if n <= 1:\n        return False\n    for i in range(2, n):\n        if n % i == 0:\n            return False\n    return True\n\ndef every_1000th_prime():\n    primes = []\n    num = 2\n    while len(primes) < 10000:\n        if is_prime(num):\n            primes.append(num)\n        num += 1\n    return [primes[i] for i in range(999, 10000, 1000)]\n\nif __name__ == \"__main__\":\n    start_time = time.time()\n    primes = every_1000th_prime()\n    for prime in primes:\n        print(prime)\n    end_time = time.time()\n    elapsed_time = end_time - start_time\n    print(f\"Time taken: {elapsed_time:.10f} seconds\")\n```\n\n## Пример запроса\n\n```copilot copy prompt ref=slow-prime\nOptimize this code for performance\n```\n\n## Пример отклика\n\nCopilot предлагает использовать функцию сива для создания простых чисел гораздо эффективнее. Если вы запускаете эту программу, она завершится в доли секунды.\n\n> \\[!NOTE] Ответы Копилот Чат являются недетерминированными, поэтому вы можете получить другой ответ, показанный здесь.\n\n```python\nimport time\n\ndef sieve_of_eratosthenes(limit):\n    sieve = [True] * (limit + 1)\n    sieve[0] = sieve[1] = False\n    for start in range(2, int(limit**0.5) + 1):\n        if sieve[start]:\n            for multiple in range(start*start, limit + 1, start):\n                sieve[multiple] = False\n    return [num for num, is_prime in enumerate(sieve) if is_prime]\n\ndef every_1000th_prime():\n    limit = 105000  # Higher than needed to ensure 10,000 primes\n    primes = sieve_of_eratosthenes(limit)\n    return [primes[i] for i in range(999, 10000, 1000)]\n\nif __name__ == \"__main__\":\n    start_time = time.time()\n    primes = every_1000th_prime()\n    for prime in primes:\n        print(prime)\n    end_time = time.time()\n    elapsed_time = end_time - start_time\n    print(f\"Time taken: {elapsed_time:.10f} seconds\")\n```\n\n## Дополнительные материалы\n\n* [Инженерия подсказок для GitHub Copilot Chat](/ru/copilot/using-github-copilot/prompt-engineering-for-github-copilot)\n* [Лучшие практики использования GitHub Copilot](/ru/copilot/using-github-copilot/best-practices-for-using-github-copilot)"}