Transients API'leri Nelerdir?

Yayınlanan: 2020-12-16

Web sitesi performansı genellikle önbelleğe alma fikri etrafında döner: verileri hazır ve erişime daha hızlı bir durumda depolama, böylece tarayıcılar tarafından daha hızlı yeniden oluşturulur. WordPress Transients API, önbelleğe almak için bir araçtır ve WordPress web siteleri için performansı artırmanın güçlü bir yoludur.

Önbelleğe Alma Nedir ve Neden Kullanılır?

Bir tarayıcı bir web sayfasını talep ettiğinde, hizmet sunucusunun çok sayıda karmaşık ve zaman alan hesaplamalar yapması gerekir, bu da gecikmelere yol açar. Bir sorguyu yürüttükten sonra, önbelleğe alma teknolojisi sayesinde, sunucu nihai sonucu hatırlayabilir ve ikinci bir istek üzerine aynı hesaplamaları tekrar yapmak zorunda kalmadan tarayıcıya sağlayabilir. Bu nedenle, önceki kaynakları önbelleğe alma ve yeniden kullanma yeteneği, performansı optimize etmek için çok önemlidir.

Oldukça basit bir şekilde önbelleğe alma, bilgileri önbelleğe alma katmanında geçici olarak saklama seçeneği sağlar.

Önbelleğe Alma Türleri Nelerdir?

Farklı önbelleğe alma türleri vardır ve bunların bir kombinasyonunu kullanarak daha yüksek bir performans seviyesi elde edersiniz.

önbelleğe alma türleri

Tarayıcı Önbelleğe Alma

Bir web sayfasının içeriğini açmadan önce, tarayıcınızın, sayfanın içeriğine ek olarak indirdiği JavaScript dosyaları, stil sayfaları, yazı tipleri vb. Gibi bir dizi şeye ihtiyacı vardır.

Bir tarayıcı bu dosyaları önbelleğe alırsa, web sitesini her yüklediğinizde bunları indirmenize gerek kalmaz. Sitenin ilk kez yüklenmesi genellikle birkaç saniye sürer, ancak tarayıcı bu dosyaları önbelleğe aldıktan sonra yükleme süresi önemli ölçüde azalır.

Sunucu Önbelleğe Alma

Sunucuyu önbelleğe alma, belirli bir sayfa için HTML dosyasını kaydetmek ve sonraki her istek için kullanılacaksa kullanmak anlamına gelir. Bu, sözde tam sayfa önbelleğidir.

Başka bir sunucu önbelleği türü daha vardır - tam sayfa önbelleğinden farklı olarak, yalnızca belirli bilgi parçalarını önbelleğe alan nesne önbelleği.

Sayfa Önbelleğe Alma

En etkili önbellek olarak kabul edildi. Adı, çalışma biçimine göre kendi kendini açıklayıcıdır. 'A' kullanıcısı bir sayfayı ziyaret ettiğinde, web sitesi onu oluşturacak ve içeriğini kullanıcının tarayıcısına döndürecektir. Sayfa Önbelleği çalışırken, bu sayfa içeriği kaydedilir, böylece 'B' kullanıcısı aynı sayfayı ziyaret ettiğinde, sayfa önbelleği önceden gönderilen içeriği yeniden üretir.

Sayfa Önbelleğinin en büyük avantajı, önbelleğe alınan sayfanın neredeyse erişim anında geri dönmesidir. Sonuç olarak, en zayıf bellek hızına ve az CPU kullanımına sahip en zayıf sunucuda bile milyonlarca istek işlenir ve sayfalar yeniden oluşturulur.

Ancak bu tür bir önbelleğin dezavantajları da vardır: örneğin, yetkili bir kullanıcı için veya sayfa içeriği mevcut kullanıcı değişkenlerine bağlı olan bir kullanıcı için sayfaları önbelleğe alamama.

Veritabanı Önbelleğe Alma

Veritabanı önbelleğe alma, arka uç veritabanlarına erişerek talep üzerine (dinamik olarak) web sayfaları oluşturan bilgisayar uygulamalarının tasarımına dahil edilen bir süreçtir. Bir veritabanı önbelleği, genellikle sık erişilen okunan veriler biçimindeki gereksiz baskıyı kaldırarak birincil veritabanınızı geliştirir. Önbelleğin kendisi, veritabanınız, uygulamanız veya bağımsız bir katman dahil olmak üzere bir dizi alanda çalışabilir.

Bu uygulamalar, tarayıcı tabanlı istemcileri, web uygulama sunucularını ve arka uç veritabanlarını içeren çok katmanlı ortamlarda devreye alındığında, yüksek ölçeklenebilirlik ve performans elde etmek için orta katman veritabanı önbelleği kullanılır.

Nesne Önbelleğe Alma

WordPress'te nesne önbelleğe alma (nesne önbelleği), veritabanı sorgularının depolanmasını içerir. Her türden veriyi (nesneyi) kaydetmenize ve gerektiğinde geri almanıza izin veren yerleşik bir sistem mekanizmasıdır. Bu önbellek, karmaşık işlemlerin sonuçlarını saklamak için kullanılır.

WordPress sitenizde etkinleştirildiğinde, PHP yürütme sürelerini hızlandırmaya, site ziyaretçilerine daha hızlı içerik sunmaya ve veritabanı üzerindeki yükü azaltmaya yardımcı olur.

CDN (İçerik dağıtım ağları)

Web hizmetleri ve site kullanıcılarına hızlı içerik ulaştıran, coğrafi olarak dağıtılmış bir ağ altyapısıdır. CDN'ye dahil olan sunucular, site / hizmetin kullanıcıları için yanıt süresini en aza indirecek şekilde coğrafi olarak konumlandırılmıştır.

WordPress'te Geçici Akımlar API'si Nedir?

Transients API, tarayıcı önbelleğe alma yerine web sitesinin veritabanında bir bilgi bloğunu (bir kod dizisi, HTML içeriği, WP_Query Nesneleri, JSON) depolamanın yoludur. Transients API, Options API'ye çok benzer, ancak temel fark, Transients API'nin bir sona erme süresine veya daha iyi bir ömre sahip olmasıdır.

Geçici akımlar için üç ana işlem değerleri ayarlamak, değerleri almak ve değerleri silmektir :

1. Bir Geçici Ayarlayın -

 set_transient ($ anahtar, $ değer, $ sona erer);

Bir geçici olay ayarlamak için, üç bileşeni olan set_transient () işlevini kullanabilirsiniz:

  • Anahtar - Geçici olayın kısa benzersiz adı. 172 karakter veya daha az uzunlukta olmalıdır.
  • Değer - Veritabanında saklanacak bilgileri içeren herhangi bir PHP değişkeni türü.
  • Expiration Time (ömür) - Bilgilerin depolanacağı süre.

Örneğin, listeleme yazıları sorgumuzu bir günlüğüne kaydetmek istiyorsak:

 set_transient ('unique_listing_posts_query_results_name',$ list_posts_query_results, DAY_IN_SECONDS);

Gördüğünüz gibi, zamanı kolayca ifade etmek için WordPress 3.5'te sunulan birkaç zaman sabitinden birini (DAY_IN_SECONDS) kullandık. İşte tüm zamanların sabitlerinin tam listesi:

 MINUTE_IN_SECONDS = 60 (saniye)
HOUR_IN_SECONDS = 60 * MINUTE_IN_SECONDS
DAY_IN_SECONDS = 24 * HOUR_IN_SECONDS
WEEK_IN_SECONDS = 7 * DAY_IN_SECONDS
MONTH_IN_SECONDS = 30 * DAY_IN_SECONDS
YEAR_IN_SECONDS = 365 * DAY_IN_SECONDS

2. Geçici Olun -

 get_transient ($ anahtar);

Kaydedilmiş bir geçici almak için kullanabiliriz

 get_transient ($ geçici_adı);

Bizim durumumuzda sorgu sonuçlarını listeleyen gönderilerimizi şu şekilde getirebiliriz:

 get_transient ( 'unique_listing_posts_query_results_name' );

Daha sonra örnek bölümümüzde daha fazlasını göreceğiz.

3. Bir Geçici Olayı Silme -

 delete_transient ($ anahtar);

Önceki alt bölümlerde açıkladığımız gibi, veritabanımıza uzaktan veya yerel (veri tabanımızdan içerik veya sorgu) yanıtlar almak ve depolamak için Transients API'yi kullanabiliriz.

Ancak, eski depolanan içeriği (geçici) nasıl sildiğimiz sorusu geliyor . Geçici akımları temizlemenin (silmenin) iki yolu vardır:

Otomatik Silme

Geçici olaylarla ilgili harika olan şey, sona erme süresini (ömür) ayarlarsak otomatik olarak sona ermeleridir . Veritabanınızdan süresi dolduktan sonra bir geçici almaya çalışırsanız, WordPress onu otomatik olarak siler ve herhangi bir dağınıklığı önler. Birisi web sitesini açtığında geçici yeniden oluşturulacaktır. Bu şekilde, uzak veya yerel API'den yeni içeriğe sahip olmamızı sağlıyoruz.

Manuel Silme

Bazen geçici olayı elle silerek erken ölmeye zorlamamız gerekir. Bu, belirli bir etkinlik (yeni menü öğesi eklemek, bir gönderiyi kaydetmek veya güncellemek, bir kategori eklemek veya güncellemek vb.), Önbelleğe alınan verileri doğal olarak eski hale getirecek ve güncellenmesi gerekecekse yararlıdır:

Kullanmamız gereken işlev

 delete_transient ($ geçici_adı)

ve bizim durumumuzda şöyle olmalıdır:

 delete_transient ( 'unique_listing_posts_query_results_name' );

Not: Yeniden oluşturulamayan değerli verileri depolamak için geçici akımları KULLANMAMAK önemlidir!

Neden Geçici API'leri Kullanmalıyız?

Çok sık değişmeyen ve önbelleğe almak istediğiniz, hesaplama açısından yoğun bir değere sahip olduğumuz her durumda, Transients API'yi kullanabiliriz. WordPress'te, bu genellikle bir veritabanı sorgusundan elde edilen nesne olacaktır, ancak bir skaler değer, bir dizi veya bir nesne olsun, bir değişkende depoladığınız herhangi bir şey olabilir.

Dolayısıyla, temalarınızda ve eklentilerinizde karmaşık sorgular yaptığınızda tüm geçişler harikadır.

Uzaktan veya Yerel Yanıtları Önbelleğe Almanın Yararları

Uzak API yanıtları

Uzak API'ler her zaman uzak sunuculara birkaç çağrı veya istek yapar ve bazı ekstra gecikmeler vardır. Bu zaman alır ve gecikmelere neden olur. Ayrıca, bazı uzak API'lerin hız sınırları olabilir; bu, belirli bir süre içinde maksimum istek sınırına ulaşabileceğiniz anlamına gelir.

Ve zaten bildiğiniz gibi, uzak sunucudan gelen yanıtı (sonucu) önbelleğe almak ve veritabanımızda saklamak için Transients API'den yararlanabiliriz. Şimdi kullanabiliriz

 get_transient ();

yöntemini kullanın ve depolanan (önbelleğe alınan) sonucu / içeriği, gerektiğinde başka uzaktan arama veya istekte bulunmadan gösterin.

Bütün bunlar:

  • Uzak HTTPS çağrılarını ve isteklerini azaltın
  • CPU sunucu kullanımını azaltın
  • Web sitesi sayfa yükleme süresini iyileştirin

Yerel API yanıtları

- temelde veritabanından alınan HTML veya sorgu sonuçları. Transients API'yi yalnızca uzak yanıtları önbelleğe almak için değil, aynı zamanda HTML içeriğini veya sorgu sonuçlarını yerel veritabanında depolamak için de kullanabilirsiniz. Web sitenizde tekrarlanabilir bir HTML bölümü (pencere öğeleri, kaydırıcılar, menüler, vb.) Göstermek veya yalnızca birisi web sitenizi her ziyaret ettiğinde karmaşık veya yavaş veritabanı sorgularının tetiklenmesini önlemek için çok kullanışlıdır.

Geçici Akımlar Nerede ve Ne Zaman Kullanılmalı?

  • Karmaşık ve özel veritabanı sorguları
  • WordPress gezinme menüleri
  • Aşağıdaki gibi bilgileri görüntüleyen kenar çubuğu widget'ları; tweet'ler, en son site ziyaretçilerinin listesi veya belirli bir kategorideki gönderilerin listesi
  • Etiket bulutlarını önbelleğe alma
  • Harici HTTP isteklerini önbelleğe alma

Kullanım ve Örnekler

Bu kadar çok açıklamadan sonra, gerçek örneklerin zamanı geldi.

Temel Kullanım

 function get_my_data () {

$ veri = get_transient ('benim_geçici_adım');
if (false === $ data) {// Geçici süre doldu / ayarlanmadı

$ veri = fetch_my_data (); // Verileri orijinal kaynaktan al

set_transient ('geçiş_adım', $ veri, HOUR_IN_SECONDS);

}

$ veri döndür;

}

fetch_my_data () işlevi WP_Query nesnesini, json verilerini, html içeriğini vb. saklayabilir.

Temel Örnek

Daha önce de açıkladığımız gibi, bu tür bir önbelleğe alma, uzun işlemlerin sonucunu kurtarmak için iyidir ve en basit örnek, Facebook gibi harici API'lere erişimdir.

Facebook API'sine erişen, bir nesne (daha doğrusu bir sayfa) your-website.url isteyen ve sayfanın beğenilme sayısını döndüren aşağıdaki işleve sahip olduğumuzu düşünün:

 function get_facebook_likes () {

$ sonuç = wp_remote_get ('https://graph.facebook.com/websiteniz.url');

$ sonuç = json_decode (wp_remote_retrieve_body ($ sonuç));

$ sonuç-> beğeniler döndür;

}

echo "Facebook beğenileri:". get_facebook_likes ();

Bu işlevin çalıştırılma süresi, sunucunuzun Facebook sunucularına göre konumu, ağın durumu ve hızı gibi birçok faktöre bağlıdır. Ortalama olarak, bir işlev 1-3 saniye sürebilir.

Bu, sitede bu işlevi kullanırken, her sayfanın yükleme süresinin 1-3 saniye artacağı anlamına gelir. Üstelik bu işlevi 500 saniyede 500'den fazla olarak adlandırırsak, Facebook sonuç yerine hata üretmeye başlayacaktır.

Bu özelliği hızlandırmak için WordPress Transients API'yi kullanabilir ve sonucu 1 saatliğine kaydedebiliriz:

 function get_facebook_likes () {
eğer (yanlış === ($ seviyor = get_transient ('fb_likes'))) {
$ sonuç = wp_remote_get ('https://graph.facebook.com/websiteniz.url');
$ sonuç = json_decode (wp_remote_retrieve_body ($ sonuç));
$ beğeniler = $ sonuç-> beğeniler;

// Saniyeler içinde bir saat için geçişi ayarla
set_transient ('fb_likes', $ beğeniler, 1 * HOUR_IN_SECONDS);
}

$ beğeniler döndür;
}

Böylelikle bu işlev ilk kez çağrıldığında, Facebook'tan bir talep aldıktan sonra, WordPress sonucu veritabanına yazacak ve ileride Facebook sunucusuna tekrarlanan isteklerde bulunmadan bu sonucu veritabanından bir saatliğine geri gönderecektir. Ve bir saat sonra, işlev veri için tekrar Facebook'a dönecek.

Bu yaklaşımla, bu işleve saatte yalnızca bir çağrı, istek süresini 1-3 saniye artıracak ve sonraki çağrılar anında verilecektir.

Daha Karmaşık Örnek

Yaklaşık 100 kategori ve yaklaşık 50.000 gönderi içeren bir web sitemiz olduğunu ve web sitesinin tek gönderi tasarımında, mevcut gönderinin bulunduğu kategoriden N ilgili gönderiyi gösteren bir widget'ımız olduğunu hayal edin. Beklendiği gibi, bu karmaşık sorgunun sonucu veritabanından alması ve web sitesinde göstermesi biraz zaman alacaktır.

Şimdi web sitesine aynı anda erişen 10 000 kullanıcınız olduğunu hayal edin. Bu, sorguyu yapmak zorunda olduğumuz 10.000'den fazla veritabanı isteğine sahip olacağımız anlamına gelir (bu, wp_terms, wp_term_relationships, wp_term_taxonomy, wp_posts tablolarında arama yapacağı için karmaşık bir sorgudur , bu nedenle bunlar 10.000'den fazla sorgu) ilgili kategoriden N gönderi için sonuç ve bunları ön uçta göstermek. Bu, sırayla, veritabanını aşırı yükleyebilir ve web sitesinin genel yükleme süresini geciktirebilir ve hatta bazı durumlarda veritabanının aşırı yüklenmesi nedeniyle çökebilir.

Ve işte veritabanı sorgularının ve isteklerinin sayısını nasıl optimize edip azaltabiliriz sorusu geliyor. Transients API'den yararlanabildiğimizde ve sadece sorgu nesnesini veya tüm HTML çıktısını önbelleğe alabildiğimizde neden her seferinde bu kadar çok sorgu oluyor? Bu şekilde, veritabanı sorgularının sayısını azaltıp optimize edeceğiz, bu da daha iyi web sitesi performansı ve daha iyi kullanıcı deneyimi sağlayacaktır.

Bizim durumumuzda sorgular, beklenen tüm sonuçları almak için wp_terms, wp_term_relationships, wp_term_taxonomy, wp_posts tablolarında arama yapacaktır .

İşte bunu nasıl başarabileceğimize dair eksiksiz bir örnek:

 function show_posts_from_category () {
$ bağımsız değişken = dizi (
'kedi' => 555, // Rastgele kategori kimliği
'posts_per_page' => 8, // Görüntülenecek rastgele ilgili gönderi sayısı
'No_found_rows' => doğru,
);

$ karma = md5 ($ değişkenler ['kedi']); // Kategori kimliğinin MD5 karması
$ transient_key = 'kategori-'. $ karma; // Geçici Anahtar

if (false === ($ posts_from_category_html = get_transient ($ transient_key))): // Geçici süre sona ermiş / ayarlanmadı

$ the_query = yeni WP_Query ($ değiştirgeler); // Sorguyu alın

ob_start (); // Çıktı tamponlamayı aç

while ($ the_query-> have_posts ()): $ the_query-> the_post ();
?>
<div class = "öğe">
<div class = "bigthumb">
<a href="<?php the_permalink();?> "rel =" bookmark "title =" <? php the_title ();?> "> <? php if (has_post_thumbnail ()) the_post_thumbnail ('büyük parmak' ); ?> </a>
</div>
<h3> <a href="<?php the_permalink();?> "rel =" bookmark "title =" <? php the_title ();?> "> <? php the_title (); ?> </a> </h3>
<? php the_excerpt (); ?>
</div>
<? php
sonunda;

$ post_from_category_html = ob_get_contents (); // Çıktı tamponunun içeriğini temizlemeden alır
ob_end_clean (); // Bu çıktı arabelleğini kapatır

set_transient ($ transient_key, $ posts_from_category_html, $ transient_expire = 15 * MINUTE_IN_SECONDS); // Geçici olayı 15 dakikalık sona erme süresiyle ayarlama

wp_reset_postdata ();
endif;

$ post_from_category_html döndür;
}

Son düşünceler

Önbelleğe alma, işleri hızlandırmanın harika bir yoludur, ancak tam olarak neyi önbelleğe aldığınızı, bunu nerede, ne zaman ve nasıl yapabileceğinizi bilmeniz gerekir, aksi takdirde beklenmedik sonuçlarla karşılaşma riskiyle karşı karşıya kalırsınız.

Bir şeyin amaçlandığı gibi çalışıp çalışmadığından emin değilseniz, her zaman profil oluşturmaya dönün - veritabanına göre her sorguya bakın, tüm PHP işlev çağrılarına, zamanlamaya ve bellek kullanımına bakın.

Transients API, WordPress web sitenizin yükleme süresini optimize etmenin ve olağanüstü bir kullanıcı deneyimi sunmanın harika bir yoludur. Eklentilerinizde ve temalarınızda geçişleri kullanmak basittir ve yalnızca birkaç ekstra kod satırı ekler. Doğru durumlarda kullanıldığında - uzun veritabanı sorguları veya karmaşık işlenmiş veriler gibi - sitenizdeki yükleme sürelerinden saniyeler tasarruf edebilir.