{"meta":{"title":"Рефакторинг для оптимизации производительности","intro":"Copilot Chat могу предложить способы ускорить медленно работающий код.","product":"GitHub Copilot","breadcrumbs":[{"href":"/ru/copilot","title":"GitHub Copilot"},{"href":"/ru/copilot/tutorials","title":"Учебники"},{"href":"/ru/copilot/tutorials/copilot-cookbook","title":"Кулинарная книга GitHub Copilot"},{"href":"/ru/copilot/tutorials/copilot-cookbook/refactor-code","title":"Код рефакторинга"},{"href":"/ru/copilot/tutorials/copilot-cookbook/refactor-code/refactor-for-optimization","title":"Рефакторинг для оптимизации"}],"documentType":"article"},"body":"# Рефакторинг для оптимизации производительности\n\nCopilot Chat могу предложить способы ускорить медленно работающий код.\n\nСуществующий код может работать правильно, но неэффективным, что приводит к узким местам производительности. Примеры программирования, которые могут негативно повлиять на производительность, включают неэффективные циклы, ненужные вычисления и чрезмерное выделение памяти.\n\nCopilot Chat может выявлять горячие точки производительности и предлагать стратегии рефакторинга, такие как оптимизация структур данных (например, использование хеш-карт вместо массивов), снижение избыточных вычислений и повышение эффективности алгоритмов. Кроме того, он может рекомендовать механизмы кэширования или операции параллелизации для повышения производительности.\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> Copilot Chat Ответы не детерминированы, поэтому вы можете получить другой ответ, чем показано здесь.\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/concepts/prompting/prompt-engineering)\n* [Лучшие практики использования GitHub Copilot](/ru/copilot/get-started/best-practices)"}