Jak przyspieszyłem
aplikację produkcyjną
o ponad 40%
Patryk Filipiak
Freelance Full Stack Developer
@thepatrykooo
patrykfilipiak.pl
O mnie
● Ulubiona technologia: Laravel ❤
● Buduję projekty po godzinach
● Tworzę aplikację do zautomatyzowania tradingu
● Uprawiam dużo sportu
● Pierwsze publiczne wystąpienie
Czynniki wpływające na szybkość aplikacji
● zasoby serwerowe
● obciążenie peaki
● złożoność wykonywanych operacji
● requesty zewnętrzne
● baza danych
● wybrane technologie do napisania projektu
● ataki hackerskie
Czy PHP jest szybki?
To zależy
● Zbyt wolny na wykonywanie skomplikowanych
algorytmów
● Słaby do dużej ilości danych
● Pozwala szybko stworzyć prototyp
● Optymalny do serwowania zawartości stron www
78% stron www korzysta z PHP
Małe demo
Optymalizacja Projektu
w Laravelu
Tworzymy projekt
● Laravel 9.x
● PHP 8.1
● Serwer: zwykły hosting współdzielony
● Cache driver - file
Sklep Online: listing kategorii wraz z załączonymi produktami
Tworzymy model: Category
Tworzymy model: Product
Seedujemy fake’owe dane
Nasz Controller
Category Resource
Product Resource - Category Child
Jak robić testy wydajnościowe?
Zmierzenie czasu wykonywania funkcji w PHP
$startTime = microtime(true);
myFunction($args);
$finishTime = microtime(true);
echo 'Total execution time: ' . ($finishTime - $startTime);
Jak robić testy wydajnościowe?
Apache Benchmark
sudo apt-get update
sudo apt-get install apache2-utils
ab -n 200 -c 10 https://github.com/
n - ilość req w teście
c - liczba req jednocześnie
Przykład Apache Benchmark
Przykład Apache Benchmark
Testy - easy
1. Test podstawowy
2. N + 1
3. Artisan Cache
4. Cache::remember
5. Composer optimize
6. Mix
ab -n 400 -c 10 https://mydomain.com/api/endpoint
1. Test Podstawowy
1. Test Podstawowy
2. N + 1
2. N + 1
2. N + 1
3. Artisan Cache
php artisan config:cache
php artisan optimize:clear
php artisan package:discover
php artisan route:cache
php artisan view:cache
3. Artisan Cache
4. Cache::remember
4. Cache::remember
5. Composer Optimize
composer install --optimize-autoloader --no-dev
5. Composer Optimize
6. MIX
1. Composer Install Optimized
2. Cache:: Remember
3. Artisan Cache
6. MIX
Podsumowanie testów
1. MIX 4.771s
2. Cache::remember 4.940s
3. Composer Optimize 5.053s
4. Artisan Cache 5.256s
5. Test Podstawowy 5.304s
6. N+1 9.232s
Test testowi nigdy nie będzie równy
Inne metody na przyspieszenie projektu - hard
● Usunięcie niepotrzebnych paczek z composer.json
● Aktualizacja używanych paczek do najnowszych wersji
● Aktualizacja PHP
● Usunięcie martwego kodu
● Optymalizacja zapytań SQL
● Uproszczenie/Refaktoryzacja poszczególnych funkcjonalności
● Wydzielenie kodu do mikroserwisów (wybór innych technologii)
● Ochrona przed DDos np. nginx throttling
Jak przyspieszyłem
aplikację produkcyjną
o ponad 40%
Testy przed optymalizacją
Testy po optymalizacji
Testy wydajnościowe przed optymalizacją
Testy wydajnościowe po optymalizacji
Jak przyspieszyłem aplikację produkcyjną o ponad 40%
Aktualizacja PHP z 7.4 do 8.1
Jak przyspieszyłem aplikację produkcyjną o ponad 40%
Jak PHP przyspieszył pomiędzy poszczególnymi wersjami?
Wersje PHP a wydajność w Symfony
Wersje PHP a wydajność w Laravelu
Patryk Filipiak
patrykfilipiak.pl
Dziękuję

More Related Content

PDF
Obalamy mity o wydajności frameworka Laravel cz. II
PPTX
[TestWarez 2017] Zen testów wydajnościowych
PDF
Wydajne API dla aplikacji mobilnych
PPTX
Wydajność i optymalizacja
PDF
Optymalizacyjna magia, czyli jak wyciągać króliki z kapelusza
PDF
Wprowadzenie do PHPUnit
PDF
Info meet pomiary wydajności
PPTX
W 3 sekundy do setki
Obalamy mity o wydajności frameworka Laravel cz. II
[TestWarez 2017] Zen testów wydajnościowych
Wydajne API dla aplikacji mobilnych
Wydajność i optymalizacja
Optymalizacyjna magia, czyli jak wyciągać króliki z kapelusza
Wprowadzenie do PHPUnit
Info meet pomiary wydajności
W 3 sekundy do setki

More from Laravel Poland MeetUp (20)

PDF
WebRTC+Websockety - Jak stworzyłem aplikację do kamerek internetowych w Larav...
PDF
xD bug - Jak debugować PHP-owe aplikacje (Xdebug)
PDF
Kilka slajdów o castowaniu atrybutów w Eloquent
PDF
Licencje otwartego oprogramowania
PDF
Jak przemycić Shape Up do Scruma?
PDF
Cykl życia zapytania HTTP (pod maską)
PDF
Enumy w Laravelu - dlaczego warto stosować?
PDF
Laravelowe paczki do uwierzytelniania
PDF
Przegląd najciekawszych wtyczek do Laravela
PDF
Walidacja w Laravelu
PDF
(prawie) Wszystko o Tinkerze
PDF
Laravel Dusk - prosty przepis na testy E2E
PDF
Laravel Octane - czy na pewno taki szybki?
PDF
Laravel Jobs i PHP8
PDF
Wszystko o Laravel Livewire
PDF
Laravel/PHP - zderzenie z PDFami
PDF
Action-based Laravel
PDF
Automatyzacja utrzymania jakości w środowisku PHP
PDF
Wstęp do Gitlab CI/CD w aplikacjach napisanych w Laravel
PDF
Laravel Collection - tablice na sterydach
WebRTC+Websockety - Jak stworzyłem aplikację do kamerek internetowych w Larav...
xD bug - Jak debugować PHP-owe aplikacje (Xdebug)
Kilka slajdów o castowaniu atrybutów w Eloquent
Licencje otwartego oprogramowania
Jak przemycić Shape Up do Scruma?
Cykl życia zapytania HTTP (pod maską)
Enumy w Laravelu - dlaczego warto stosować?
Laravelowe paczki do uwierzytelniania
Przegląd najciekawszych wtyczek do Laravela
Walidacja w Laravelu
(prawie) Wszystko o Tinkerze
Laravel Dusk - prosty przepis na testy E2E
Laravel Octane - czy na pewno taki szybki?
Laravel Jobs i PHP8
Wszystko o Laravel Livewire
Laravel/PHP - zderzenie z PDFami
Action-based Laravel
Automatyzacja utrzymania jakości w środowisku PHP
Wstęp do Gitlab CI/CD w aplikacjach napisanych w Laravel
Laravel Collection - tablice na sterydach
Ad

Jak przyspieszyłem aplikację produkcyjną o ponad 40%