Apa itu API Transien?

Diterbitkan: 2020-12-16

Performa situs web sering kali berkisar pada gagasan caching: menyimpan data dalam keadaan siap dan lebih cepat diakses, sehingga lebih cepat direproduksi oleh browser. WordPress Transients API adalah alat untuk menyimpan cache, dan cara yang ampuh untuk meningkatkan kinerja situs WordPress.

Apa Itu Caching dan Mengapa Menggunakannya?

Setiap kali browser meminta halaman web, server layanan harus melakukan banyak penghitungan yang rumit dan memakan waktu, yang menyebabkan penundaan. Setelah menjalankan kueri, berkat teknologi caching, server dapat mengingat hasil akhir dan atas permintaan kedua, berikan ke browser tanpa harus melakukan kalkulasi yang sama lagi. Oleh karena itu, kemampuan untuk menyimpan dan menggunakan kembali sumber daya sebelumnya sangat penting untuk mengoptimalkan kinerja.

Caching menyediakan opsi untuk menyimpan informasi sementara di lapisan caching.

Apa Saja Jenis Caching?

Ada berbagai jenis caching dan dengan menggunakan kombinasi keduanya, Anda akan mencapai tingkat kinerja yang lebih tinggi.

jenis caching

Caching Browser

Sebelum membuka konten halaman web, browser Anda membutuhkan banyak hal seperti file JavaScript, stylesheet, font, dan sebagainya, yang semuanya diunduh selain konten halaman.

Jika browser menyimpan file-file ini, tidak perlu mengunduhnya setiap kali Anda memuat situs web. Memuat situs untuk pertama kali biasanya membutuhkan waktu beberapa detik, tetapi setelah browser menyimpan file-file itu, waktu pemuatan berkurang secara signifikan.

Caching Server

Caching server berarti menyimpan file HTML untuk halaman tertentu dan digunakan jika untuk setiap permintaan berikutnya. Inilah yang disebut cache halaman penuh.

Ada jenis lain dari cache server - cache objek, yang, tidak seperti cache halaman penuh, hanya menyimpan cache bit (potongan) informasi tertentu.

Caching Halaman

Dianggap sebagai cache paling efektif. Namanya sudah cukup jelas untuk cara kerjanya. Ketika pengguna 'A' mengunjungi sebuah halaman, situs web akan membangunnya dan mengembalikan isinya ke browser pengguna. Dengan berjalannya Cache Halaman, konten halaman ini disimpan sehingga ketika pengguna 'B' mengunjungi halaman yang sama, cache halaman mereproduksi konten yang dikirim sebelumnya.

Keuntungan terbesar dari Cache Halaman adalah bahwa halaman yang di-cache kembali hampir pada saat akses. Hasilnya, jutaan permintaan diproses dan halaman direproduksi bahkan di server terlemah dengan kecepatan memori paling rendah dan penggunaan CPU yang sedikit.

Namun jenis cache ini juga memiliki kekurangannya: misalnya, ketidakmampuan untuk menyimpan halaman ke cache untuk pengguna yang diberi otorisasi, atau untuk pengguna yang konten halamannya bergantung pada variabel pengguna saat ini.

Caching Database

Caching database adalah proses yang termasuk dalam desain aplikasi komputer yang menghasilkan halaman web sesuai permintaan (secara dinamis) dengan mengakses database backend. Cache database menyempurnakan database utama Anda dengan menghilangkan tekanan yang tidak perlu, biasanya dalam bentuk data baca yang sering diakses. Cache itu sendiri dapat beroperasi di sejumlah area termasuk database, aplikasi, atau sebagai lapisan mandiri.

Saat aplikasi ini diterapkan pada lingkungan multi-tier yang melibatkan klien berbasis browser, server aplikasi web dan database backend, cache database tingkat menengah digunakan untuk mencapai skalabilitas dan kinerja yang tinggi.

Cache Objek

Cache objek di WordPress (cache objek) melibatkan penyimpanan kueri database. Ini adalah mekanisme sistem bawaan yang memungkinkan Anda menyimpan data (objek) dari jenis apa pun dan mengambilnya saat diperlukan. Cache ini digunakan untuk menyimpan hasil operasi yang kompleks.

Saat diaktifkan di situs WordPress Anda, ini membantu mempercepat waktu eksekusi PHP, mengirimkan konten ke pengunjung situs lebih cepat, dan mengurangi beban pada database.

CDN (Jaringan pengiriman konten)

Ini adalah infrastruktur jaringan yang terdistribusi secara geografis yang menyediakan pengiriman konten dengan cepat kepada pengguna layanan web dan situs. Server yang termasuk dalam CDN secara geografis terletak sedemikian rupa sehingga membuat waktu respon untuk pengguna situs / layanan menjadi minimal.

Apa Itu Transients API di WordPress?

Transients API adalah cara untuk menyimpan blok informasi (string kode, konten HTML, WP_Query Objects, JSON) dalam database situs web sebagai lawan dari cache browser. Transients API sangat mirip dengan Options API, tetapi perbedaan utamanya adalah bahwa Transients API memiliki waktu kedaluwarsa atau umur yang lebih baik.

Tiga operasi utama untuk transien adalah menetapkan nilai, mendapatkan nilai, dan menghapus nilai :

1. Setel Transien -

 set_transient ($ key, $ value, $ expires);

Untuk menyetel transient Anda bisa menggunakan fungsi set_transient () yang memiliki tiga komponen:

  • Key - Nama unik singkat dari transien. Panjangnya harus 172 karakter atau kurang.
  • Nilai - Semua jenis variabel PHP yang berisi informasi yang akan disimpan dalam database.
  • Expiration Time (lifespan) - Jumlah waktu dimana informasi akan disimpan.

Jadi misalnya jika kita ingin menyimpan query posting listing kita untuk satu hari:

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

Seperti yang Anda lihat, kami telah menggunakan satu (DAY_IN_SECONDS) dari beberapa konstanta waktu yang diperkenalkan di WordPress 3.5 untuk mengekspresikan waktu dengan mudah. Berikut adalah daftar lengkap konstanta sepanjang masa:

 MINUTE_IN_SECONDS = 60 (detik)
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. Dapatkan Transient -

 get_transient ($ key);

Untuk mendapatkan transient yang disimpan bisa kita gunakan

 get_transient ($ transient_name);

Dalam kasus kami, kami dapat mengambil hasil kueri daftar posting kami dengan:

 get_transient ( 'unique_listing_posts_query_results_name' );

Kita akan melihat lebih banyak tentang itu nanti di bagian contoh kita.

3. Hapus Transient -

 delete_transient ($ key);

Seperti yang kami jelaskan di subbagian sebelumnya, kami dapat menggunakan Transients API untuk mendapatkan dan menyimpan respons jarak jauh atau lokal (konten atau kueri dari database kami) ke database kami.

Namun, inilah pertanyaan tentang bagaimana kami menghapus konten lama yang disimpan (sementara). Ada dua cara untuk menghapus (menghapus) transien:

Penghapusan Otomatis

Hal yang keren tentang transien adalah bahwa transien akan kedaluwarsa secara otomatis jika kita menetapkan waktu kedaluwarsa (masa hidup) . Jika Anda mencoba mengambil transien dari database Anda setelah masa berlakunya habis, WordPress akan secara otomatis menghapusnya, mencegah kekacauan apa pun. Transient akan dibuat kembali setelah seseorang membuka situs web. Dengan cara ini kami memastikan bahwa kami memiliki konten segar dari API jarak jauh atau lokal.

Penghapusan Manual

Terkadang kita perlu memaksa transien mati lebih awal dengan menghapusnya secara manual. Ini berguna ketika aktivitas tertentu (menambahkan item menu baru, menyimpan atau memperbarui posting, menambah atau memperbarui kategori, dll.) Akan membuat data yang di-cache menjadi basi dan perlu diperbarui:

Fungsi yang harus kita gunakan adalah

 delete_transient ($ transient_name)

dan dalam kasus kami seharusnya:

 delete_transient ( 'unique_listing_posts_query_results_name' );

Catatan: Penting untuk TIDAK menggunakan transien untuk menyimpan data berharga yang tidak dapat dibuat ulang!

Mengapa Kita Harus Menggunakan Transients API?

Kita dapat menggunakan Transients API setiap kali kita memiliki nilai intensif komputasi yang tidak terlalu sering berubah dan Anda ingin menyimpan cache. Di WordPress, ini biasanya akan menjadi objek yang dihasilkan dari kueri database, tetapi bisa jadi itu benar-benar apa pun yang Anda simpan dalam variabel, baik nilai skalar, array, atau objek.

Jadi semua dalam semua transien bagus saat Anda melakukan kueri kompleks di tema dan plugin Anda.

Manfaat Caching Remote atau Respons Lokal

Respons API jarak jauh

API Jarak Jauh selalu melakukan beberapa panggilan atau permintaan ke server jarak jauh dan ada beberapa latensi tambahan. Ini membutuhkan waktu dan menyebabkan penundaan. Selain itu, beberapa API jarak jauh dapat memiliki batas kecepatan, artinya Anda dapat mencapai batas permintaan maksimum dalam jangka waktu tertentu.

Dan seperti yang telah Anda ketahui, kami dapat memanfaatkan Transients API untuk menyimpan respons (hasil) dari server jarak jauh dan menyimpannya dalam database kami. Sekarang kita bisa menggunakan

 get_transient ();

metode dan menampilkan hasil / konten yang disimpan (dalam cache) di mana pun diperlukan tanpa melakukan panggilan atau permintaan jarak jauh lainnya.

Semua ini akan:

  • Kurangi panggilan dan permintaan HTTPS jarak jauh
  • Kurangi penggunaan server CPU
  • Tingkatkan waktu buka halaman situs web

Tanggapan API lokal

- pada dasarnya HTML atau hasil query dari database. Anda dapat menggunakan Transients API tidak hanya untuk menyimpan respons jarak jauh, tetapi juga untuk menyimpan konten HTML atau hasil kueri di database lokal. Ini sangat berguna jika Anda ingin menampilkan bagian HTML yang dapat diulang di situs web Anda (widget, penggeser, menu, dll.) Atau hanya untuk mencegah kueri basis data yang rumit atau lambat dipicu setiap kali seseorang mengunjungi situs web Anda.

Dimana dan Kapan Menggunakan Transien?

  • Kueri database yang kompleks dan kustom
  • Menu navigasi WordPress
  • Widget sidebar yang menampilkan info seperti; tweet, daftar pengunjung situs terbaru atau daftar posting dari kategori tertentu
  • Menyimpan awan tag
  • Menyimpan permintaan HTTP eksternal

Penggunaan dan Contoh

Setelah begitu banyak penjelasan, inilah waktunya untuk contoh nyata.

Penggunaan Dasar

 function get_my_data () {

$ data = get_transient ('my_transient_name');
if (false === $ data) {// Transient telah kedaluwarsa / belum disetel

$ data = fetch_my_data (); // Tarik data dari sumber asli

set_transient ('my_transient_name', $ data, HOUR_IN_SECONDS);

}

return $ data;

}

Fungsi fetch_my_data () dapat menyimpan objek WP_Query, data json, konten html , dll.

Contoh Dasar

Seperti yang telah kami jelaskan, jenis cache ini bagus untuk menyimpan hasil operasi yang lama, dan contoh paling sederhana adalah mengakses API eksternal, seperti Facebook.

Bayangkan kita memiliki fungsi berikut, yang mengakses API Facebook, meminta objek (lebih tepatnya, halaman) situs-Anda.url dan mengembalikan jumlah suka halaman:

 function get_facebook_likes () {

$ result = wp_remote_get ('https://graph.facebook.com/your-website.url');

$ result = json_decode (wp_remote_retrieve_body ($ result));

kembalikan $ result-> suka;

}

echo "suka Facebook:". get_facebook_likes ();

Waktu pelaksanaan fungsi ini bergantung pada banyak faktor, termasuk lokasi server Anda relatif terhadap server Facebook, status, dan kecepatan jaringan, dll. Rata-rata, suatu fungsi memerlukan waktu 1-3 detik.

Artinya saat menggunakan fungsi ini di situs, waktu muat setiap halaman akan bertambah 1-3 detik. Selain itu, jika kita memanggil fungsi ini lebih dari 500 kali dalam 500 detik, Facebook akan mulai menghasilkan kesalahan, bukan hasil.

Untuk mempercepat fitur ini, kita bisa menggunakan WordPress Transients API dan menyimpan hasilnya selama 1 jam:

 function get_facebook_likes () {
if (false === ($ likes = get_transient ('fb_likes'))) {
$ result = wp_remote_get ('https://graph.facebook.com/your-website.url');
$ result = json_decode (wp_remote_retrieve_body ($ result));
$ suka = ​​$ hasil-> suka;

// Setel sementara untuk satu jam dalam detik
set_transient ('fb_likes', $ suka, 1 * HOUR_IN_SECONDS);
}

mengembalikan $ suka;
}

Jadi, saat fungsi ini dipanggil pertama kali, setelah menerima request dari Facebook, WordPress akan menuliskan hasilnya ke database dan di masa mendatang akan mengembalikan hasil ini dari database selama satu jam tanpa membuat request berulang-ulang ke server Facebook. Dan setelah satu jam, fungsi tersebut akan kembali beralih ke Facebook untuk data.

Dengan pendekatan ini, hanya satu panggilan ke fungsi ini per jam yang akan menambah waktu permintaan 1-3 detik, dan panggilan berikutnya akan dikeluarkan secara instan.

Contoh yang Lebih Kompleks

Bayangkan kita memiliki situs web dengan sekitar 100 kategori dan sekitar 50.000 posting, dan dalam desain posting tunggal situs web kita memiliki widget yang menampilkan N posting terkait dari kategori di mana posting saat ini berada. Seperti yang diharapkan, kueri kompleks ini akan membutuhkan waktu untuk mengambil hasil dari database dan menampilkannya di situs web.

Sekarang bayangkan Anda memiliki 10.000 pengguna yang mengakses situs web pada saat yang bersamaan. Ini berarti bahwa kita akan memiliki 10.000+ permintaan database yang harus melakukan kueri (ini adalah kueri kompleks karena akan mencari melalui wp_terms, wp_term_relationships, wp_term_taxonomy, wp_posts tables , jadi ada lebih dari 10.000 kueri), untuk mendapatkan hasil untuk N posting dari kategori terkait dan untuk ditampilkan di frontend. Hal ini, pada gilirannya, akan membebani database dan menunda waktu pemuatan situs web secara keseluruhan, dan dalam beberapa kasus bahkan merusaknya karena kelebihan muatan database.

Dan inilah pertanyaan tentang bagaimana kita dapat mengoptimalkan dan mengurangi jumlah query dan permintaan database. Mengapa ada begitu banyak kueri setiap kali kita dapat memanfaatkan Transients API dan hanya menyimpan cache objek kueri atau menyimpan seluruh output HTML dalam cache? Dengan cara ini kami akan mengurangi dan mengoptimalkan jumlah kueri database, yang akan menghasilkan kinerja situs web yang lebih baik dan pengalaman pengguna yang lebih baik.

Dalam kasus kami, kueri akan mencari di tabel wp_terms, wp_term_relationships, wp_term_taxonomy, wp_posts untuk mendapatkan semua hasil yang diharapkan.

Berikut adalah contoh lengkap bagaimana kita dapat melakukannya:

 function show_posts_from_category () {
$ args = larik (
'cat' => 555, // ID kategori acak
'posts_per_page' => 8, // Nomor acak dari posting terkait untuk ditampilkan
'No_found_rows' => benar,
);

$ hash = md5 ($ args ['cat']); // Hash MD5 dari ID kategori
$ transient_key = 'kategori-'. $ hash; // Kunci Transien

if (false === ($ posts_from_category_html = get_transient ($ transient_key))): // Transient telah kedaluwarsa / belum disetel

$ the_query = new WP_Query ($ args); // Dapatkan kueri

ob_start (); // Aktifkan buffering keluaran

sementara ($ the_query-> have_posts ()): $ the_query-> the_post ();
?>
<div class = "item">
<div class = "bigthumb">
<a href="<?php the_permalink();?> "rel =" bookmark "title =" <? php the_title ();?> "> <? php if (has_post_thumbnail ()) the_post_thumbnail ('big-thumb' ); ?> </a>
</div>
<h3> <a href="<?php the_permalink();?> "rel =" bookmark "title =" <? php the_title ();?> "> <? php the_title (); ?> </a> </h3>
<? php the_excerpt (); ?>
</div>
<? php
sementara;

$ post_from_category_html = ob_get_contents (); // Mendapat konten buffer keluaran tanpa mengosongkannya
ob_end_clean (); // Matikan buffering keluaran ini

set_transient ($ transient_key, $ posts_from_category_html, $ transient_expire = 15 * MINUTE_IN_SECONDS); // Menyetel transient dengan waktu kedaluwarsa 15 menit

wp_reset_postdata ();
berakhir jika;

return $ post_from_category_html;
}

Pikiran Akhir

Caching adalah cara yang bagus untuk mempercepat, tetapi Anda harus tahu persis apa yang Anda caching, di mana Anda dapat melakukannya, kapan dan bagaimana, jika tidak Anda berisiko menghadapi konsekuensi yang tidak terduga.

Jika Anda tidak yakin apakah ada sesuatu yang berfungsi sebagaimana mestinya, selalu beralih ke pembuatan profil - lihat setiap kueri pada database, lihat semua panggilan fungsi PHP, pengaturan waktu, dan penggunaan memori.

Transients API adalah cara terbaik untuk mengoptimalkan waktu pemuatan situs WordPress Anda dan untuk memberikan pengalaman pengguna yang luar biasa. Menggunakan transien di plugin dan tema Anda sederhana dan hanya menambahkan beberapa baris kode tambahan. Saat digunakan dalam situasi yang tepat - seperti kueri database yang panjang atau data yang diproses dan kompleks - ini dapat menghemat beberapa detik dari waktu muat di situs Anda.