Skip to content

Instantly share code, notes, and snippets.

@EduardoSP6
Last active January 8, 2025 20:10
Show Gist options
  • Select an option

  • Save EduardoSP6/4c2ad117824c8348fd9989eaeccc7270 to your computer and use it in GitHub Desktop.

Select an option

Save EduardoSP6/4c2ad117824c8348fd9989eaeccc7270 to your computer and use it in GitHub Desktop.
Performance e otimizações em aplicações Laravel

Como melhorar performance em aplicações Laravel

Ferramentas de monitoramento:

Laravel Telescope - Monitoramento completo, incluindo APIs Laravel Debugbar - Monitoramento de requisições, queries no banco de dados, etc.

Dicas para melhorar desempenho:

  • Rodar comandos artisan para criar cache:
php artisan config:cache

php artisan event:cache

php artisan route:cache

php artisan view:cache

php artisan optimze --force

(não esqueça de rodar um :clear antes para limpar o cache anterior).

  • Otimizar o autoload do composer:
composer dumpautoload -o
  • Usar o Laravel Telescope para monitorar a aplicação em produção.

Banco de dados SQL:

  • Sempre crie indices para os dados mais pesquisados das tabelas.
  • Sempre crie indices para as chaves estrangeiras.
  • Verifique configurações de tunning para o banco de dados.
  • A modelagem do banco afeta a performance:
    • Quanto mais relacionamentos many-to-many mais processamento será demandado.
    • Uma chave estrangeira significa que um JOIN será feito mais tarde.
  • Evite armazenar arquivos e afins em campos BLOB e etc.
  • Tente sempre resolver problemas nas queries, processamento no banco de dados é muito mais rápido que na aplicação Web.

Banco de dados no Laravel:

  • Somente recupere do banco o que você precisa, evitar select * ...

    • select * from posts
    • select * from posts join users...
  • Tente criar consultas usando LIMIT e OFFSET:

    • select id, title, description from posts where id = 1 limit 1
    • select id, title, description from posts where limit 15 offset 50
  • Resolva problemas com o menor número de queries possível: 3 queries é melhor que 4, 2 queries é melhor que 3 e 1 query é o cenário perfeito!

  • Para queries mais complexas evite usar os models do Eloquent, use a facade \DB (mais rápido).

  • Para várias inserções (bulk), use a facade \DB:

\DB:table('my-table')->insert([ [], [], [] ]);

Eloquent ORM:

  • Somente recupere do banco o que você precisa:

Post::all(['title', 'description']) ou Post::...->get(['title', 'description']);

Ou

Post::select(['campos', 'etc'])...->get();

  • Use Eager Loading em vez do Lazy Loading (é o padrão do Eloquent):

Exemplos:

Post::with('comments')->get() 

User::with('posts.categories') 

Ou usando uma instancia de Collection:

$posts->load('comments.user')
  • Tente utilizar o conceito de subqueries e/ou withCount na mesma consulta SQL, evite criar mais queries se você pode resolver em uma só:
User::addSelect(['latest_post' => subquery])->withCount('posts')...->get();
  • Use generators para lidar com massa grande de dados, ou seja, LazyCollections (Laravel 6.x).

  • Utilize cache a vontade para evitar acessos desnecessários no banco de dados.

Dicas gerais:

  • Crie cache de páginas da aplicação. Lib: https://github.com/spatie/laravel-responsecache

  • Evite criar muitos services providers, quanto mais services providers, mais processamento será demandado.

  • Use Redis ou similar para administrar o cache da aplicação, será cache em memória e é muitpo mais rápido que cache em arquivos ou banco de dados.

  • Minifique assets com o Laravel Mix em produção.

link do projeto: https://github.com/schoolofnetcom/laravel-otimizacao-performance

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment