Рубрики
Uncategorized

Онлайн – Список-20 Оптимизаций Производительности Приложений Laravel

Автор оригинала: David Wong.

Давайте начнем! Если ваше приложение laravel уже находится в производстве.

От первого пользователя, до десятого, сотого, до тысяч пользователей! Медленно, Чем больше у вас пользователей, тем медленнее будет работать ваш сайт.

Так что же нам делать? Детали определяют успех или неудачу

После долгих поисков я решил записать это. Двадцать советов по ускорению работы вашего сайта

Я начну с основ, большинство из которых являются мгновенными операциями. Затем я буду постепенно улучшать сложность. Наконец, более продвинутый контент. Если вы будете следовать моим шагам шаг за шагом, я верю, что ваш сайт будет качественно улучшен.

Наслаждайтесь своим учебным путешествием! Если у вас есть какие-либо предложения, вы можете оставить сообщение ниже! Я рад обсудить это с вами.

Основные Оптимизации

Давайте посмотрим, что мы сможем сделать за несколько секунд.

1. Кэш маршрутизации

Каждый раз, когда сервер выполняет запрос, регистрируются все маршруты, что занимает некоторое время. Однако вы можете выбрать кэширование списка маршрутизации, чтобы пропустить этот шаг.

Кэширование списков маршрутизации очень просто. Все, что вам нужно сделать, это выполнить следующую команду после развертывания приложения:

php artisan route:cache

Однако, если вы добавляете или изменяете какую-либо информацию о маршрутизации, не забудьте очистить предыдущий кэш и повторно выполнить команду кэширования.

php artisan route:clear

# Then, execute again
php artisan route:cache

Обратите внимание, что это применимо только для маршрутизации класса контроллера.

2. Конфигурация кэша

Как и в случае с маршрутизацией, вы также можете кэшировать файлы конфигурации в приложениях.

Представьте себе такой сценарий: каждый раз, когда вы отправляете запрос в приложение, Laravel необходимо загрузить другой файл конфигурации и открыть его. .env Файл считывает содержимое. Это способ с низкой производительностью, не так ли?

Но не волнуйтесь, есть команда Ремесленников, которая управляет этим.

php artisan config:cache

Вы можете использовать его после развертывания. Так же, как и при маршрутизации, не забывайте очищать кэш при редактировании.

php artisan config:clear

# Then, again...
php artisan config:cache

3. Оптимизация автоматической загрузки Композитора

Обычно Composer очень быстро генерирует автоматически загруженные файлы. Однако в производственной среде, если установлены правила автоматической загрузки PSR-4 и PSR-0, это может замедлиться.

Вы можете оптимизировать процесс создания файла автоматического загрузчика, добавив в сценарий развертывания следующие команды.

$  composer dump-autoload  -o

Не забывай об этом.

4. Слух: “Не используйте вид лезвия слишком часто.”

Я слышал все эти слухи.

“Никогда не используйте представление блейда слишком часто, потому что это может снизить производительность приложения! “

Полная ложь! Серьезное лицо!

Имейте это в виду: Laravel компилирует представления лезвий. Компиляция означает, что в конце процесса у вас будет скомпилированный полный файл вместо использования нескольких файлов.

Так что беспокоиться не о чем.

        • *

Промежуточные сухие товары

5. Перейдите на другой/лучший драйвер кэша/сеанса

По умолчанию при создании нового проекта Laravel драйверы кэша и сеанса по умолчанию сохраняются в файле. Это нормально для локальных сред разработки и небольших проектов, но по мере роста проектов все становится больше.

Так что подумайте о лучшем водителе, таком как Redis. Laravel имеет встроенную поддержку, и все, что вам нужно сделать, это установить Predis.

Более подробная информация здесь и здесь.

6. Обновите Laravel как можно скорее

Когда выйдет новая версия, не забудьте обновить Laravel как можно скорее. Речь идет не только о новых функциях: все участники тратят время на устранение проблем с производительностью вокруг кодовой базы, где это возможно.

Так что следите за кодом и поддерживайте его в актуальном состоянии.

7. Удалите неиспользуемые службы

Это навык, о котором многие люди часто забывают. Задавайте себе вопросы:

“Мне это нужно?” *

Мы знаем, что у Laravel много сервисов, в конце концов, это целая структура стека, и у каждой службы есть свое место.

Так что потратьте некоторое время на проверку. config/app.php Документируйте и посмотрите, сможете ли вы найти услугу, которая вам не нужна. Если все работает, попробуйте удалить его и протестировать свое приложение.

Это должно помочь (немного)!

8. Запрос с предварительной загрузкой

Если вы знаете, что такое Laravel, вы, вероятно, знаете, что такое предварительная загрузка. Если ваша информация недостаточно своевременна, предварительная загрузка-это способ повысить производительность за счет использования специального синтаксиса для сокращения количества запросов, отправляемых в базу данных.

Эта проблема называется проблемой N + 1 запроса. Давайте приведем пример. У вас есть две модели: Книга и Автор. У каждой книги есть свой автор.

$books  =  App\Book::all();

foreach  ($books  as  $book)  {
    echo  $book->author->name;
}

Представьте, что у вас в базе данных 1000 книг. Теперь этот код будет выполнен 1001 Найдите имя автора 1000 книг.

1 (Запрос для получения данных для 1000 книг) + 1000 (Запрос для получения данных об авторе для каждой.

Но если вы напишете такой код

$books  =  App\Book::with('author')->get();

foreach  ($books  as  $book)  {
    echo  $book->author->name;
}

Измените базовый запрос, чтобы избежать этой проблемы с производительностью. Вы будете выполнять только два запроса вместо 1001! Это огромное повышение производительности.

9. Кэширование результатов запросов

Иногда кэширование определенного результата запроса может быть хорошей идеей.

Представьте себе сценарий, в котором вы собираетесь отобразить список десяти лучших альбомов на главной странице вашего приложения. Эта работа выполняется путем выполнения запросов из базы данных (запросы могут включать таблицы исполнителей и другие таблицы). Ваша домашняя страница посещается 1000 раз в час.

Если количество запросов для этих данных ранжирования составляет 1000 в час, то количество запросов, выполняемых за день, составляет 24 000. Теперь давайте предположим, что этот список обновляется каждый час. Так как насчет кэширования результатов поискового запроса в течение часа?

$value  =  Cache::remember('top_10_albums',  60,  function  ()  {
    return  Album::with('artist',  'producer')->getTopTen();
});

Компонент кэша запомнить Метод сначала извлекает данные из базы данных и кэширует их в течение 60 минут, не находя кэш. Когда срок его действия истечет, он извлечет последние данные из базы данных и обновит кэш.

Количество запросов колеблется от 24 000 до 24 в день.

10. Проиндексируйте свои таблицы

Не забудьте проиндексировать свои таблицы, когда это необходимо. Это может показаться ключом к разгадке отсутствия яиц, но на самом деле это необходимо. Потому что я видел так много приложений, что в их таблицах нет индексов.

Это легко реализовать. Вы можете создать новую миграцию базы данных и использовать описанные в ней методы для добавления индексов.

Schema::table('my_table_name',  function(Blueprint  $table){
    $table->index('field_to_be_indexed');
});

Конечно, индекс создается непосредственно там, где вам нравится его создавать. Вы должны изучить свой бизнес, код и запросы, проанализировать, где индекс наиболее необходим, а затем создать индекс.

11. Слишком много промежуточного программного обеспечения?

Laravel выполняет множество (фронтальных/обратных) вызовов к вашему зарегистрированному промежуточному программному обеспечению. Поэтому, пожалуйста, внимательно проверьте их и удалите промежуточное программное обеспечение, которое вам не нужно.

Обычно список промежуточного программного обеспечения находится в Kernel.php

12. Пришло время использовать очереди!

Иногда Laravel работает медленнее, чем ожидалось, поэтому вы можете рассмотреть возможность асинхронного выполнения задач.

Наиболее распространенный сценарий-отправить приветственное электронное письмо. Давайте взглянем на поток задач.

  1. Пользователи заполняют наши формы;
  2. Запишите его/ее данные в базу данных;
  3. Отправьте ему или ей электронное письмо с приветственным сообщением и ссылкой для подтверждения.
  4. И покажите страницу “Спасибо”.

Во многих случаях эти задачи выполняются полностью в контроллере и последовательно.

Мое предложение состоит в том, чтобы научиться использовать события и очереди, а также делегировать задачу отправки почты выделенному процессу, чтобы улучшить пользовательский интерфейс.

        • *

Старшие галантерейные товары

13. Улучшение асинхронных очередей с помощью толкателя

Я писал об очередях выше. Иногда вы также можете использовать очереди для улучшения задач, ориентированных на пользователя.

Представьте, что вы создаете тяжелый (вычислительный) процесс и хотите показать пользователям индикатор выполнения задачи. Вы можете легко использовать асинхронные задачи в очереди и интегрировать Pusher для отправки сообщений на внешний интерфейс, даже если задача не завершена.

Другим часто используемым примером является отправка сообщений пользователям без обновления страницы.

Подумайте об этом.

14. Инструменты измерения и отладки с использованием журналов/Отладочных панелей/Телескоп Laravel

С точки зрения самосовершенствования, есть цитата, которая мне очень нравится. От моего генерального директора (Спасибо, Массимо!) Это звучит как цитата из Питера Друкера.

Если вы не можете измерить это, вы не можете улучшить это.

Эта концепция хорошо подходит для контекста веб-приложений. Чтобы улучшить время управления запросами веб-приложений, необходимо многое измерить. К счастью, у нас есть много отличных инструментов для этого.

  • Медленный журнал: MYSQL, MariaDB и другие базы данных могут включать медленное ведение журнала для отслеживания инструкций, которые занимают много времени. Вы можете использовать эти данные, чтобы определить, следует ли изменять или оптимизировать конкретный код (или запросы).
  • Панель отладки: Панель отладки Laravel – отличный пакет расширений. Во многих приложениях вы можете использовать его для сбора данных. Например, запросы, представления, время и т. Д.
  • Телескоп Laravel: Еще один классный инструмент-телескоп Laravel, который имеет прозвище “элегантный помощник по отладке” для приложений Laravel. Если вам интересно, я написал статью об этом здесь.

15. Обновите свою версию PHP

Хотя это может показаться простым, если ваш проект достаточно большой, его будет очень сложно реализовать, поэтому я думаю, что это будет добавлено к продвинутым навыкам.

Если ваша версия PHP ниже 7.0, обновите версии PHP и laravel.

16. Используйте Lumen на сервере

Если объем данных в вашем приложении резко возрастает, вы можете рассмотреть возможность разделения вашей системы. Однако нет четкого способа провести вас через это: высокие или низкие стандарты разделения зависят от многих факторов, начиная от области приложения и заканчивая работой, необходимой для разделения всего необходимого контента.

Но как только вы успешно завершите его, ваш проект будет возобновлен.

Если вас интересует эта тема, вы можете начать с https://medium.com/@munza/lar…

17. Предоставление услуг CDN для статических ресурсов

Я уверен, что у вас есть много интерфейсных ресурсов, таких как CSS-файлы и JS-скрипты.

Вы можете уменьшить объем данных, отправляемых пользователям, различными способами:

  • Сжатие статических ресурсов;
  • Привязка статических ресурсов (объединение нескольких CSS-файлов или JS-скриптов в один, чтобы уменьшить количество запросов);
  • Откройте сжатие gzip;

Однако, если вы сталкиваетесь с большим трафиком, вы можете разместить свои статические ресурсы на выделенных серверах CDN, таких как:

  • Акамай (Акамай);
  • MaxCDN;
  • Облачная вспышка;
  • Сервис Amazon AWS (S3 + CloudFront);

Примечание переводчика: Вы можете использовать “Пайюнь” и “Цинююнь” в Китае.

18. Используйте передовые измерительные инструменты

Установка панели отладки Laravel или Телескопа была бы хорошим началом, но этого недостаточно для более крупных проектов.

Вам нужно выбрать более продвинутые инструменты, как показано ниже:

  • Новая реликвия;
  • Оптика Приложения;
  • Журнал данных;
  • Караул;

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

19. Вертикальное расширение

Вы тщательно оптимизировали детали кода, но объем вашего приложения растет. Рано или поздно вам придется расширяться по вертикали.

Есть простая поговорка: больше оперативной памяти, больше места, больше пропускной способности и больше процессоров.

Обратите внимание, что это обычная практика для многих стартапов, у которых недостаточно времени для планирования рефакторинга/оптимизации. Это хорошая идея, так что вы можете думать об этом как о временном решении, которое даст вам передышку.

20. Горизонтальное расширение

Горизонтальное расширение-это еще один способ расширения, который отличается от традиционного вертикального расширения. Есть два основных момента:

  • Вместо добавления аппаратных ресурсов в существующие конфигурации вы можете добавить дополнительные функциональные модули для обработки растущего трафика. В среде с вертикальным масштабированием вам просто нужно добавить конфигурацию сервера, но горизонтальное масштабирование означает, что ваше приложение будет развернуто и запущено на разных компьютерах, возможно, после балансировки нагрузки или других служб. Это означает, что требуется больше настроек и конфигураций; на данный момент все не так просто;
  • Не все заявки могут быть продлены за короткое время. Иногда вам нужно провести рефакторинг и изолировать какой-то код. Иногда вам нужно разделить приложения на небольшие службы разных размеров.

Горизонтальное масштабирование требует многого, но как только вы сможете масштабировать приложения горизонтально, преимущества будут за пределами воображения.

заключение

Сегодня достаточно контента! Я создал этот список, объединив свой личный опыт с предыдущими исследованиями.

Если вам нравится, пожалуйста, не стесняйтесь предлагать какие-то новые вещи. Я хотел бы соответствующим образом обновить эту статью.

От https://learnku.com/laravel/t…