Arkadaşlar merhaba.
Laravel ile bir CMS projesi yaptım. Wordpress tarzı, eklenti sistemini destekleyen bir haber portalı diyebiliriz. Composer yöntemi ile de paketlerimi oluşturdum. Her birine ayrı ayrı namespace'ler verdim, örneğin ;
te/api
te/users
gibi neredeyse 10'a yakın paketim oldu. Gelişmiş Tema yapısı da kurdum. Http response cache paketi de yaptım (te/cache). Middleware ile anasayfayı cache'ledim. Herşey buraya kadar normal.
Vee beklediğim sürprizle karşılaştım. Apache "AB" testinde laravel 8 sürünüyor resmen. Sonuç şu;
ab -k -n 50 -c 10 http://127.0.0.1/
Concurrency Level: 10
Time taken for tests: 3.325 seconds
Complete requests: 50
Failed requests: 0
Keep-Alive requests: 0
Total transferred: 3913746 bytes
HTML transferred: 3851100 bytes
Requests per second: 15.04 [#/sec] (mean)
Time per request: 665.015 [ms] (mean)
Time per request: 66.502 [ms] (mean, across all concurrent requests)
Transfer rate: 1149.45 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 1
Processing: 54 552 154.2 598 716
Waiting: 53 551 154.2 597 715
Total: 55 552 154.2 598 716
Percentage of the requests served within a certain time (ms)
50% 598
66% 613
75% 619
80% 649
90% 701
95% 711
98% 716
99% 716
100% 716 (longest request)
Üzerinde proje gelişmemiş sıfır laravel framework ise "Time taken for tests: 0,6 seconds" gibi bir sonuç çıkıyor. Yani benim projemdeki paketlerle beraber bu 3.325 saniye oluyor. (10 ziyaretçi ile 50 request testi). Haber sitesi gibi yüksek hit alan bir projeyi düşünürsek örneğin anlık 10,000 kişi haldır huldur siteye girse ne yapacağız kara kara düşünmeye başladım🙁
Araştırmalarım sonucunda ne kadar cache yapsak da laravel provider'ları yine görüyor ve doğal olarak time per request yükseliyor. Benim fikrim laravel kendini boot etmeden kernel kısmında (public/index.php) cache datasını basmak fakat bunu nasıl yapabilirim. Ya da buna gerek yok diyen varsa ne yapmalıyım, sunucu derlemeleri iş görür mü? Nginx mi kurmalıyım? Tecrübesi ve fikri olan var mı?
Teşekkürler.