Laravel Bölüm 4'ü Optimize Etme: Kuyruklar, Ön Uç ve Önbellek Konuları

Son makalemde, nesne önbelleğe almanın ne olduğuna ve bir Laravel uygulamasının performansını artırmak için nasıl ve ne zaman kullanılacağına baktık.
Bu makalede, bir Laravel uygulamasının performansını iyileştirmek için daha küçük ama yine de çok kullanışlı taktiklere bakacağız:
- Zaman alan görevlerin üstesinden gelmek için kuyrukları kullanma.
- Ön uç varlıkları yükleme performansını iyileştirme (varlıkları sıkıştırma, satıcı çıkarma, önbellek bozma).
- Opcache etkinken PHP'nin modern bir sürümünü kullanma.
Ağır Kaldırma için Kuyrukları Kullanın
Bir Laravel uygulamasının performansını anında iyileştirmenin basit bir yolu, zaman alan görevleri sıradaki bir işe yüklemektir. Buradaki fikir, kullanıcı UI'deki bilgilere hızlı bir şekilde ihtiyaç duymadığı sürece, bir görev ertelenebilir ve daha sonra ayrı bir işlem tarafından arka planda çalıştırılabilir (örn. bir e-posta göndermek). Bu, uygulamanızdaki web isteklerinin hızını önemli ölçüde artırabilir.
Laravel, kullanıma hazır bir dizi kuyruk sürücüsü desteği ile birlikte gelir (örn. veritabanı, Beanstalkd, Amazon SQS, Redis) ve ayrıca aşağıdaki Artisan komutu kullanılarak çalıştırılabilen yerleşik bir kuyruk çalışanı ile birlikte gelir:
php artisan queue:work
Bu makalenin bir parçası olarak Laravel'de nasıl kuyruk oluşturulacağını açıklamayacağım, çünkü Laravel dokümanları bu konuda harika bir iş çıkarıyor. Bir iş sınıfı oluşturmanın basit olduğunu ve işi Laravel'de bir kuyruğa eklemenin, iş sınıfında dispatch çağırmak kadar basit olduğunu söylemek yeterli:
SendEmailJob::dispatch($to, $body);
Uygulamanızda kuyrukları yoğun bir şekilde kullanmaya başlarsanız, kuyruk çalışanınız için Laravel Horizon gibi biraz daha sağlam bir çözüm düşünmeye değer olabilir (bunu SpinupWP için kullanıyoruz). Horizon yalnızca Redis kuyruk sürücüsünü destekler, ancak iş çıkışı, çalışma zamanı ve iş hataları gibi kuyruğunuzun temel ölçümlerini kolayca izlemenize olanak tanıyan bir gösterge panosu sunar. Ayrıca yapılandırması çok kolaydır ve işleri birden çok kuyrukta "dengeleme", etiketleme ve bildirimler gibi özellikler sunar.
Ön Uç Varlıklarının Daha Hızlı Yüklenmesini Sağlayın
Arka uç PHP kodu, performansın Laravel uygulamamızı nasıl etkileyebileceğini düşünmemiz gereken tek yer değil. Aslında, varlıkları ön uçta yükleme performansından çok, uygulamanızın yavaş hissetmesi veya çabuk hissetmesi arasındaki farkı yaratan şey budur.
Neyse ki Laravel, Laravel Mix adlı ön uç varlıklarla çalışmayı kolaylaştıran yerleşik bir araca sahiptir. Mix, CSS öncesi/sonrası işleme, kaynak haritaları oluşturma, satıcı ayıklama, dosya/klasör kopyalama, BrowserSync yeniden yükleme vb. gibi her türlü işlemi destekler. Javascript çerçeveleri hızlı ve kolay.
Örneğin, varsayılan Mix yapılandırma dosyasında şu satırlar bulunur:
mix.js('resources/js/app.js', 'public/js') .sass('resources/sass/app.scss', 'public/css');
Ardından, varlıkları derlemek için önceden tanımlanmış package.json komut dosyalarından birini çalıştırmak şu kadar basittir:
npm run dev
Varlıkları Sıkıştırmak
Varsayılan olarak, varlıklar birlikte paketlenir ancak sıkıştırılmaz. Neyse ki varlıkları sıkıştırmak, bunun yerine önceden tanımlanmış "üretim" komut dosyasını çalıştırmak kadar basittir:
npm run production
Varlıkların sıkıştırılması, azaltılmış dosya boyutu nedeniyle eskisinden çok daha hızlı yüklenmelerini sağlar.
Satıcı Çıkarma
Mix, ortak "satıcı" kitaplıklarını daha uzun süre önbelleğe alınabilmeleri için ayrı bir paket komut dosyasına çıkarmanıza olanak tanıyan Vendor Extraction'ı destekler. Bu, uygulama kodunuz her güncellendiğinde tarayıcının değişmeyen satıcı kodunun tamamını yeniden indirmesi gerekmeyeceği ve sayfa yüklemelerinin çok daha hızlı olabileceği anlamına gelir.
Satıcı ayıklamasını kullanmak, Mix yapılandırmanızda extract() işlevini kullanmak kadar basittir:
mix.js('resources/js/app.js', 'public/js') .extract(['vue', 'lodash']);
Tek, büyük bir dosya oluşturmak yerine, bu artık üç ayrı dosya oluşturacaktır:
-
public/js/manifest.js– Webpack manifest çalışma zamanı -
public/js/vendor.js– Satıcı kitaplıklarınız -
public/js/app.js– Uygulama kodunuz
Önbellek Bozma
Laravel Mix'in bir başka yararlı özelliği de Cache Busting'dir. Buradaki fikir, tarayıcıları kodun eski (önbelleğe alınmış) kopyalarını sunmak yerine yeni varlıkları yüklemeye zorlamak için varlıklarınıza bir zaman damgası veya benzersiz bir belirteç eklemenizdir. Bu, özellikle sona erme süresi çok uzak olan statik varlıkları sunarken veya bunları bir CDN'ye aktarırken kullanışlıdır.
Önbellek bozmayı ayarlamak, Mix yapılandırmanızda version() işlevini kullanmak kadar basittir. Sürümlü dosyalar normalde geliştirme aşamasında gereksiz olduğundan, bunu yalnızca üretim için yapmak yaygındır:
mix.js('resources/js/app.js', 'public/js'); if (mix.inProduction()) { mix.version(); }
Ardından, laravel görünümünüzde, mix() helper işlevini kullanarak varlığı yükleyebilirsiniz:
<script src="{{ mix('/js/app.js') }}"></script>
Üretimde, çıktı şöyle görünecektir:
<script src="/js/app.js?id=fdfc97ad79c0c17270fa"></script>
Opcache ile Modern PHP kullanın
Bu makalede ele alacağımız son optimizasyon, doğrudan Laravel'in kendisiyle ilgili değildir, ancak bir Laravel uygulamasının performansında büyük bir fark yaratacaktır. Ve basitçe şudur: Opcache etkinleştirilmiş olarak PHP'nin modern bir sürümünü kullanın.
PHP 5.6 yerine PHP 7.2/7.3 kullanmak, bir Laravel uygulamasının performansını %100 oranında (~340 istek/sn ila ~700 istek/sn) artırabilir. Burada Laravel'in v5.5'ten beri PHP 7.0+ ve v5.6'dan beri PHP 7.1+ gerektirdiğini belirtmekte fayda var. Dolayısıyla, PHP'nin modern bir sürümünü Laravel ile kullanmamak için gerçekten hiçbir neden yok.
Bunu bir adım daha ileri götürerek, önceden derlenmiş komut dosyası bayt kodunu paylaşılan bellekte depolayarak performansı artıran, PHP'nin her istekte komut dosyalarını yükleme ve ayrıştırma ihtiyacını ortadan kaldıran Opcache'i PHP'de etkinleştirebilirsiniz (bunu düşük seviyeli bir önbellek olarak düşünün).
PHP 7'den beri, modül kuruluysa Opcache varsayılan olarak etkindir (ancak üretim için optimize edilmemiştir). Modül kurulu değilse, kendiniz kurmanız gerekecektir (modülü kurma işlemi sunucunuza bağlı olarak farklılık gösterecektir). Etkin olduğundan emin olmak için aşağıdakiler için php.ini kontrol etmeniz gerekir:
opcache.enable=1
Özelleştirmeniz gereken opcache ayarları ortama bağlı olacaktır (sunucunun boyutu, trafik miktarı vb.), ancak PHP aşağıdaki temel yapılandırmayı önerir:
opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=4000 opcache.revalidate_freq=60 opcache.fast_shutdown=1 opcache.enable_cli=1
Burada her bir ayarın ne yaptığını açıklamayacağım ama onlar hakkında PHP belgelerinde okuyabilirsiniz. Opcache'i etkinleştirmenin performans etkisi hakkında size bir fikir vermek için, 1GB/1CPU DigitalOcean Droplet'te yapılandırmanıza bağlı olarak ~%300 artış elde edebilirsiniz (~10 istek/sn ila ~40 istek/sn). Opcache etkinleştirildiğinde ve üretim için ayarlandığında, değişikliklerinizin etkili olması için her dağıtımdan sonra PHP'yi yeniden yüklemeniz gerekeceğini belirtmekte fayda var.
Sana doğru
İşte orada. Performansı önemli ölçüde artırabilecek, Laravel uygulamanızda yapabileceğiniz nispeten basit üç optimizasyon. Bu serideki önceki makalelerle birleştiğinde, artık son derece hızlı bir Laravel uygulamasına sahip olmalısınız! Bu da bizi Laravel'i optimize etmeye ilişkin bu kısa dizinin sonuna getiriyor.
Daha önce Laravel'i optimize etmek için bu makaledeki taktiklerden herhangi birini kullandınız mı? Eğer öyleyse, nasıl geçtiniz? Değilse, şimdi onları deneyecek misiniz? Başka ipucu var mı? Yorumlarda bize bildirin.
ev borcu WordPress sitesi