WordPress kodunda bir trafik sıkışıklığı bulun
Birkaç ay önce Iain, ekibimizin, Xdebug, birim testi ve kod incelemesi gibi araçları kullanarak kod kalitesini nasıl geliştirdiğimize dair bilgiler de dahil olmak üzere birbirimizi daha iyi bir geliştirici olmaya nasıl teşvik ettiğini yazdı. Bu araç, kod tabanına girilen hata sayısını önemli ölçüde azaltabilse de, bu araç her zaman, özellikle kaynakların performansı ve kullanımı açısından daha fazla sorun yaratabilecek daha pürüzsüz sorunları vurgulamamaktadır. Bu makalede, kod tabanınızdaki potansiyel performans sorunlarını belirleyebileceğiniz ve gerçek bir sorun olmadan önce düzeltmenize izin vermesi beklenen birkaç yol göstermek istiyorum. BlackFire kullanarak kod profilinin oluşturulmasına geçmeden önce Monitör sorgusuyla başlayalım.
Sorgu Monitör İzleme, John Blackbourn tarafından bir hata ayıklama eklentisidir ve geçerli sayfa isteği hakkında şu şekilde birçok yararlı bilgi sağlar:
Sayfa yapma ve hafıza kullanma zamanı
Veritabanı sorguları gerçekleştirilir ve gereken süre
Yavaş veya yinelenen veritabanı sorguları
HTTP istekleri WordPress HTTP API kullanılarak yapılır
Her kancaya eklenen istek ve eylem sırasında kanca ateşlenir
Ayrıca yönetici bıçaklarına önemli metrikler ekler, böylece herhangi bir harici aygıtı açmak zorunda kalmadan gerçekleştirilen bir sayfa yapma zamanını, bellek kullanımı, veritabanı sorguları ve toplam veritabanı sorgularını hızlı bir şekilde görebilirsiniz. Bence, bu en kolay yollardan biridir, böylece bir geliştirici olarak yaptığınız değişikliklerin performans tıkanıklığı potansiyeline neden olmamasını sağlayabilirsiniz.
Gerçek Dünya Kullanımı Varlıkları yönetme yolunu temelden değiştiren WP boşaltma S3 Varlık 1.2’nin en son sürümünün bir örneğini görelim. Değişiklikler olağan kod inceleme süreci ile yapılır ve her şey iyi görünüyor. Her şey beklendiği gibi çalışır ve tetiklenen hatalar yoktur, ancak bir bakışta yönetici tıkanıklık potansiyelini vurgular. Addon Varlığının 1.1.2 sürümünden 1.2’den 1.2’ye geçerken, veritabanı sorgularının sayısının neredeyse iki katına çıktığını göreceksiniz: Yerleşim hata ayıklamasını açarken, ‘wpos3_proess-assets_batch_%’ gibi birçok sorunun olduğunu görebilirsiniz. Sorgu Monitörü, bunun kopya olduğunu ve hepsinin AS3CF_Background_Process sınıfındaki Get_Batches yönteminden çağrıldığını gösteriyor: Bu, N+1 sorununa benzer, çünkü her etkin eklenti için ‘wpos3_princess-assets_batch_%’ gibi sorguları yapıyoruz. Benzer quents genellikle kötü olsa da, option_name sütunundaki dizin, ancak MySQL’e olan arama sayısını mümkün olduğunca azaltmaya çalışmalıyız. Çözüm, TO_PROCESS yönteminde Get_Batches’in sonuçlarını önbelleğe almak için basittir: MySQL sorgu monitörü dışında yavaş veya yinelenen bir veritabanı sorgusu bulmak için çok iyidir, ancak darboğazdan mysql’den kaynaklanmazsa ne olur? Bir kod profili oluşturmanın yararlı olabileceği yer burasıdır. Bir kod profili oluşturmak, uygulamanızdaki her bir fonksiyon çağrısının frekansını ve süresini ölçmenizi sağlar. Bu içgörü seviyesi, performansın tıkanıklığını izlemek için çok değerli olabilir ve bir profil yaparken tamamen yeniyseniz parlatabilir. Talebin yaklaşık% 25’inin Smilies’i ayrıştırmak için harcandığını gösteren aşağıdaki tweet’i alın (aslında mevcut değil). Bunun, Preg_Replace_Callback işlevinin 2,119 kez, çılgın olanın denir olması olduğunu görebilirsiniz! Smilies düşünmek WordPress’in performansını etkilemez mi? Onları devre dışı bırakın ve kendiniz görün. Açılış saatinden 1.22 saniye ile 971 milisaniye. #Wordpress #webperf pic.twitter.com/3xgugb4nd2 – Ashley Rich (@A5hlerich) 19 Ekim 2016 Siyah API Aralarından seçim yapabileceğiniz birçok PHP profili var, ancak Blackfire’ın büyük bir hayranıyım, ayarlarının kolaylığı ve kullanıcı -arkadaşça kullanıcı arayüzü. Profil sonuçları, uygulama yürütme yolunu gösteren ve duvar zamanı (gerçek dünya zamanı), G/Ç süresi, CPU zamanı, bellek ve ağ gibi ayrıntılı bir kaynak tüketim metriği sunan bir çağrı grafiğinde sunulur. Ücretli sürüm ayrıca HTTP ve SQL isteklerine sahiptir ve performans uzmanları tarafından belirlenen öneriler sunar.
Dalış Hadi WP boşaltma S3 Varlıkları 1.2’nin en son sürümünün başka bir örneğini görelim. Aşağıdaki çağrı grafikleri tamamen etkileşimlidir ve imleci sürükleyerek araştırılabilir: WordPress’in karmaşıklığı nedeniyle meydana gelen birçok şey vardır, ancak genel olarak pembe çağrı grafiğindeki herhangi bir şey araştırılmalıdır. Bu örnekte iki ilgi alanı vardır: mysqli_query ve serialize. MySQLI_Query öznitelikleri, duvarın toplam süresinin yaklaşık% 28’idir, bu da aşırı görünebilir, ancak bu MAMP’yi çalıştıran bir yerel geliştirme makinesi olduğu için, MySQL’in kötü performans göstermesi nadir değildir. MySQL’in, duvarın toplam süresinin% 99.5’i olan MySQLI_Query işlevi için bekleme süresi G/Ç’yi kontrol ederek bir engelleme olduğunu doğrulayabilirsiniz.
Preg_ işlevlerinin kullanımı veya büyük dizeleri işlerken
API çağrılarına giriş (yanıtın uygun şekilde önbellek olmasını sağlamak için)
Burada görüntülenen araç mevcut tek seçenek değildir;Hata Ayıklama Bar ve Xdebug Profiler popüler bir alternatiftir.Kod profilinizi oluşturuyor musunuz?Evet ise, hangi araçları kullanıyorsunuz?Bize aşağıdaki yorumlarda anlatın.
Sorgu Monitör İzleme, John Blackbourn tarafından bir hata ayıklama eklentisidir ve geçerli sayfa isteği hakkında şu şekilde birçok yararlı bilgi sağlar:
Sayfa yapma ve hafıza kullanma zamanı
Veritabanı sorguları gerçekleştirilir ve gereken süre
Yavaş veya yinelenen veritabanı sorguları
HTTP istekleri WordPress HTTP API kullanılarak yapılır
Her kancaya eklenen istek ve eylem sırasında kanca ateşlenir
Ayrıca yönetici bıçaklarına önemli metrikler ekler, böylece herhangi bir harici aygıtı açmak zorunda kalmadan gerçekleştirilen bir sayfa yapma zamanını, bellek kullanımı, veritabanı sorguları ve toplam veritabanı sorgularını hızlı bir şekilde görebilirsiniz. Bence, bu en kolay yollardan biridir, böylece bir geliştirici olarak yaptığınız değişikliklerin performans tıkanıklığı potansiyeline neden olmamasını sağlayabilirsiniz.
Gerçek Dünya Kullanımı Varlıkları yönetme yolunu temelden değiştiren WP boşaltma S3 Varlık 1.2’nin en son sürümünün bir örneğini görelim. Değişiklikler olağan kod inceleme süreci ile yapılır ve her şey iyi görünüyor. Her şey beklendiği gibi çalışır ve tetiklenen hatalar yoktur, ancak bir bakışta yönetici tıkanıklık potansiyelini vurgular. Addon Varlığının 1.1.2 sürümünden 1.2’den 1.2’ye geçerken, veritabanı sorgularının sayısının neredeyse iki katına çıktığını göreceksiniz: Yerleşim hata ayıklamasını açarken, ‘wpos3_proess-assets_batch_%’ gibi birçok sorunun olduğunu görebilirsiniz. Sorgu Monitörü, bunun kopya olduğunu ve hepsinin AS3CF_Background_Process sınıfındaki Get_Batches yönteminden çağrıldığını gösteriyor: Bu, N+1 sorununa benzer, çünkü her etkin eklenti için ‘wpos3_princess-assets_batch_%’ gibi sorguları yapıyoruz. Benzer quents genellikle kötü olsa da, option_name sütunundaki dizin, ancak MySQL’e olan arama sayısını mümkün olduğunca azaltmaya çalışmalıyız. Çözüm, TO_PROCESS yönteminde Get_Batches’in sonuçlarını önbelleğe almak için basittir: MySQL sorgu monitörü dışında yavaş veya yinelenen bir veritabanı sorgusu bulmak için çok iyidir, ancak darboğazdan mysql’den kaynaklanmazsa ne olur? Bir kod profili oluşturmanın yararlı olabileceği yer burasıdır. Bir kod profili oluşturmak, uygulamanızdaki her bir fonksiyon çağrısının frekansını ve süresini ölçmenizi sağlar. Bu içgörü seviyesi, performansın tıkanıklığını izlemek için çok değerli olabilir ve bir profil yaparken tamamen yeniyseniz parlatabilir. Talebin yaklaşık% 25’inin Smilies’i ayrıştırmak için harcandığını gösteren aşağıdaki tweet’i alın (aslında mevcut değil). Bunun, Preg_Replace_Callback işlevinin 2,119 kez, çılgın olanın denir olması olduğunu görebilirsiniz! Smilies düşünmek WordPress’in performansını etkilemez mi? Onları devre dışı bırakın ve kendiniz görün. Açılış saatinden 1.22 saniye ile 971 milisaniye. #Wordpress #webperf pic.twitter.com/3xgugb4nd2 – Ashley Rich (@A5hlerich) 19 Ekim 2016 Siyah API Aralarından seçim yapabileceğiniz birçok PHP profili var, ancak Blackfire’ın büyük bir hayranıyım, ayarlarının kolaylığı ve kullanıcı -arkadaşça kullanıcı arayüzü. Profil sonuçları, uygulama yürütme yolunu gösteren ve duvar zamanı (gerçek dünya zamanı), G/Ç süresi, CPU zamanı, bellek ve ağ gibi ayrıntılı bir kaynak tüketim metriği sunan bir çağrı grafiğinde sunulur. Ücretli sürüm ayrıca HTTP ve SQL isteklerine sahiptir ve performans uzmanları tarafından belirlenen öneriler sunar.
Dalış Hadi WP boşaltma S3 Varlıkları 1.2’nin en son sürümünün başka bir örneğini görelim. Aşağıdaki çağrı grafikleri tamamen etkileşimlidir ve imleci sürükleyerek araştırılabilir: WordPress’in karmaşıklığı nedeniyle meydana gelen birçok şey vardır, ancak genel olarak pembe çağrı grafiğindeki herhangi bir şey araştırılmalıdır. Bu örnekte iki ilgi alanı vardır: mysqli_query ve serialize. MySQLI_Query öznitelikleri, duvarın toplam süresinin yaklaşık% 28’idir, bu da aşırı görünebilir, ancak bu MAMP’yi çalıştıran bir yerel geliştirme makinesi olduğu için, MySQL’in kötü performans göstermesi nadir değildir. MySQL’in, duvarın toplam süresinin% 99.5’i olan MySQLI_Query işlevi için bekleme süresi G/Ç’yi kontrol ederek bir engelleme olduğunu doğrulayabilirsiniz.
Serialize edilmeme sadece toplam duvar süresinin yaklaşık% 8’ini nitelendirir, ancak daha endişe verici olan, buna toplam 653 kez denir! Çağrı grafiğine geri dönen yürütme yolunu takip ederseniz, get_files için get_files_by_loocation 460 kez aradığını göreceksiniz. Bu doğru değil! Çözüm bir kez daha basittir-yukarıda yaptığımız gibi get_files sonuçlarını önbelleğe almamız gerekir:
Şimdi bir kod profili oluşturursak, sonuçlar çok daha eğlenceli görünüyor: hem serialize hem de get_files_by_loocation çağrı grafiğinde görünmez (düşük duvar süresi nedeniyle), ancak işlevler arıyorsanız, bunların olduğunu göreceksiniz 213 kadar ve her biri 20 kez aradı. Bu yeterince büyük bir artış!
Preg_ işlevlerinin kullanımı veya büyük dizeleri işlerken
API çağrılarına giriş (yanıtın uygun şekilde önbellek olmasını sağlamak için)
Burada görüntülenen araç mevcut tek seçenek değildir;Hata Ayıklama Bar ve Xdebug Profiler popüler bir alternatiftir.Kod profilinizi oluşturuyor musunuz?Evet ise, hangi araçları kullanıyorsunuz?Bize aşağıdaki yorumlarda anlatın.