Rumah > Tutorial CMS > WordTekan > teks badan

Panduan Pembangunan Aplikasi Web WordPress: Penjelasan terperinci tentang ciri yang tersedia (Bahagian 7): Teknologi caching

WBOY
Lepaskan: 2023-08-30 12:37:02
asal
841 orang telah melayarinya

WordPress Web应用开发指南:可用功能详解(第7部分):缓存技术

Salah satu perkara paling penting yang mesti sentiasa kita perhatikan semasa membina aplikasi web ialah prestasi.

Seperti yang mereka katakan, prestasi adalah ciri.

Sama ada anda seorang pereka bentuk, pembangun atau pengguna, anda tahu perkara ini secara intuitif: apabila ia berkaitan dengan apl, kami tidak suka menunggu. Kita berasa kecewa apabila perkara tidak berfungsi dengan pantas, atau kita perlu menunggu lebih lama daripada yang kita fikirkan.

Untuk tujuan ini, kebanyakan rangka kerja pembangunan web moden boleh melaksanakan beberapa jenis caching melalui penggunaan API tertentu, dan WordPress (walaupun asasnya) tidak terkecuali.

Jadi, semasa kami meneruskan perbincangan kami tentang mengapa WordPress merupakan pilihan yang berdaya maju sebagai asas untuk pembangunan aplikasi web, kami akan melihat API yang disediakan oleh aplikasi teras, cara ia berfungsi dan cara kami boleh menggunakannya untuk kelebihan kami, serta sebagai cara menggunakan tambahan Pemalam caching meningkatkan lagi prestasi.


Kenapa caching penting?

Secara ringkasnya, caching adalah penting kerana ia membolehkan kita menyimpan data yang kerap diambil di suatu tempat dalam ingatan supaya ia dapat diambil semula dengan cepat.

Apabila anda melihat gambaran yang lebih besar, ini menjadi lebih jelas apabila berbilang pengguna melihat tapak web. Apa yang saya maksudkan ialah, jika seorang (atau sangat sedikit orang) melawat tapak web, dan tapak web itu menyimpan datanya dalam pangkalan data, maka setiap kali halaman itu dimuatkan, maklumat itu perlu diambil dari tapak web. pangkalan data, dimasukkan ke dalam halaman, dan dikembalikan kepada pengguna.

Jika tahap cache tertentu ditetapkan, pangkalan data tidak perlu dipanggil dengan kerap. Sebaliknya, maklumat boleh ditarik dari kawasan dalam ingatan, membolehkan untuk mendapatkan semula lebih cepat dan oleh itu masa muat halaman lebih cepat.

Kami akan membincangkan butiran teknikal ini kemudian dalam artikel ini.

Bagaimana dengan pemalam?

Jika anda telah lama menggunakan WordPress, anda mungkin sudah biasa dengan banyak pemalam caching yang tersedia.

Ini sudah pasti penyelesaian yang bagus untuk mempercepatkan tapak web dan/atau aplikasi web anda, tetapi ia menimbulkan persoalan: jika anda boleh menggunakan pemalam untuk melakukan ini, maka mengapa kita perlu risau tentangnya?

Sudah tentu, ini adalah soalan yang sah, tetapi pemalam hanya boleh melakukan banyak perkara sendiri.

Pembangun boleh membina aplikasi mereka dengan cara yang bukan sahaja berfungsi dengan baik tanpa mekanisme caching, tetapi juga dipertingkatkan dengan pemalam caching tersebut.

Maksud saya, pemalam caching ini mencari data yang ingin disimpan oleh tema dan aplikasi di suatu tempat, dan jika kita boleh melakukan ini secara pengaturcaraan dalam konteks kerja kita sendiri, maka pemalam ini akan memberi kesan yang lebih besar pada prestasi .

Selepas memahami API yang tersedia, kami akan menyemak semula topik ini kemudian dalam artikel ini dan melihat cara ia boleh meningkatkan prestasi pemalam caching.


IPU Sementara

Untuk memperkenalkan caching peringkat pertama dalam aplikasi kami, kami perlu memanfaatkan API Transients WordPress. Pertama, sila ambil perhatian bahawa takrifan rasmi bagi sementara ialah "sesuatu yang wujud hanya untuk jangka masa yang singkat

Seperti yang ditakrifkan dalam Codex Alimentarius:

[API Transient] menyediakan cara mudah dan piawai untuk menyimpan data cache buat sementara waktu dalam pangkalan data dengan memberikan nama tersuai dan julat masa selepas itu data akan tamat tempoh dan dipadamkan.

Tetapi apakah sebenarnya maksud ini? Lagipun, data masih disimpan dalam pangkalan data, jadi mengapa ini lebih baik daripada menyimpan data dalam mana-mana jadual pangkalan data lain (seperti jadual wp_options?)? wp_options 表?)中更好呢?

一旦我们重新审视有关缓存和插件的讨论,我们将更详细地讨论这个问题。

设置瞬态

设置瞬态值实际上非常简单,就像在选项表中存储数据一样。

具体来说,您需要一个唯一标识数据的键值,然后需要一个与该键关联的值。您还需要一个过期时间(以秒为单位)来在刷新表之前将数据保留在表中。

假设我们希望将当前用户的名称存储为网站上最后一个或最近活跃的用户。我们可以利用 wp_get_current_user() 函数来做到这一点。

首先,我们将设置如下值:

set_transient( 'most_recent_user', wp_get_current_user()->user_login, 12 * HOUR_IN_SECONDS )

在这里,请注意以下几点:

  • 我将系统中最近的用户识别为当前登录的用户,并且我们会将其存储 12 小时。
  • 请注意,HOUR_IN_SECONDS
  • Kami akan membincangkan perkara ini dengan lebih terperinci sebaik sahaja kami menyemak semula perbincangan tentang caching dan pemalam.

Sediakan transients Menetapkan nilai sementara sebenarnya semudah menyimpan data dalam jadual pilihan.

Secara khusus, anda memerlukan nilai kunci yang mengenal pasti data secara unik, dan kemudian nilai yang dikaitkan dengan kunci itu. Anda juga memerlukan masa tamat tempoh (dalam saat) untuk menyimpan data dalam jadual sebelum memuat semula jadual.

🎜Andaikan kita ingin menyimpan nama pengguna semasa sebagai pengguna aktif terakhir atau paling terkini di tapak web. Kita boleh melakukan ini menggunakan fungsi wp_get_current_user(). 🎜 🎜Pertama, kami akan menetapkan nilai berikut: 🎜 🎜set_transient( 'most_recent_user', wp_get_current_user()->user_login, 12 * HOUR_IN_SECONDS )🎜 🎜Di sini, sila beri perhatian kepada perkara berikut: 🎜
  • Saya mengenal pasti pengguna terbaharu dalam sistem sebagai pengguna yang sedang log masuk dan kami menyimpannya selama 12 jam. 🎜
  • Sila ambil perhatian bahawa pemalar HOUR_IN_SECONDS telah diperkenalkan dalam WordPress 3.5. Senarai lengkap pemalar tersedia di sini. 🎜 🎜 🎜Walaupun begini cara kami 🎜menyediakan transien🎜, ini masih tidak menjelaskan cara kami menguruskan transien jika ia tidak wujud atau sudah wujud. 🎜 🎜Kami akan membincangkan perkara ini secara terperinci kemudian dalam artikel ini. 🎜

    Mengambil sementara

    Apabila ia datang untuk mendapatkan sementara, ia sangat serupa dengan mendapatkan semula sesuatu seperti metadata atau pilihan. Maksud saya, kita hanya perlu tahu kunci untuk mendapatkan semula maklumat tersebut.

    Jadi, untuk konsisten dengan contoh di atas, kami boleh mendapatkan pengguna terbaharu aplikasi dengan panggilan berikut:

    get_transient('most_recent_user');get_transient('most_recent_user');

    这显然会返回您存储的任何类型的信息,或者如果瞬态已过期(即已经过去超过 12 小时),则该函数将返回 FALSE 的布尔值.

    这是要记住的关键,特别是当您尝试读取缓存值,然后需要从另一个数据源获取它们(如果它们在临时存储中不可用)时。

    我们将在本文结束之前看一下执行此操作的完整示例。

    删除瞬态

    最后,如果您需要删除瞬态以将其完全删除,或者在其定义的到期之前将其删除以便将其替换为另一个值,那么您只需使用以下函数:

    delete_transient('most_recent_user');

    此外,如果临时值删除不成功,该函数将返回 FALSE;否则,它将返回 FALSE

    即将到期的瞬态

    在设置缓存值的过期时间时,有多种方法可以使设置值比音乐基本整数操作更容易。

    例如,MINUTE_IN_SECONDS 比 60 更容易使用,尤其是在乘以分钟、小时或天时。

    从 WordPress 3.5 开始,核心应用程序中添加了几个常量,使这些计算更易于阅读。

    即:

    • MINUTE_IN_SECONDS
    • HOUR_IN_SECONDS
    • DAY_IN_SECONDS
    • WEEK_IN_SECONDS
    • YEAR_IN_SECONDS

    更容易使用、阅读和编写,不是吗?


    使用瞬态的完整示例

    此时,我认为重要的是要了解如何从在选项表中存储值开始设置瞬态。

    以下是我们执行此操作的顺序:

    1. 我们将在 wp_options 表中保存一个选项。
    2. 接下来,我们将检查缓存中是否存在该值。
    3. 如果该值确实存在于缓存中,我们将删除它;否则,我们将添加它。

    然后,在代码的后半部分,我们将执行以下操作:

    1. 我们将尝试从缓存中检索值函数。
    2. 如果该值存在于缓存中,我们将回退到选项表;但是,如果该值确实存在,那么我们将使用它。

    话虽如此,让我们看一下:

    $username = wp_get_current_user()->user_name;
    add_option( 'most_recent_user', $username );
    
    // Check to see if the value exists in the cache
    if ( FALSE !== get_transient( 'most_recent_user' ) ) {
    
    	// If it does, we'll delete it...
    	if( delete_transient( 'most_recent_user' ) ) {
    
    		// ...and store the most recent user for a maximum of one minute
    		set_transient( 'most_recent_user', MINUTE_IN_SECONDS );
    
    	} else {
    		// The deletion was unsuccessful, so log the error
    	}
    
    }
    
    // Now try to read the value from the cache.
    if ( FALSE !== ( $username = get_transient( 'most_recent_user' ) ) {
    
    	// Since it doesn't exist, then we'll read it from the option's table
    	$username = get_option( 'most_recent_user' );
    
    	// And then we'll update the cache
    	set_transient( 'most_recent_user', $username, MINUTE_IN_SECONDS );
    
    }
    
    Salin selepas log masuk

    请注意,这个示例并不完整 - 它可以重构得更清晰一些,并且代码应该抽象为与应用程序更相关的函数,但此代码的目的是展示如何处理条件逻辑、选项和瞬态。


    这如何与插件配合?

    现在,综上所述,我们可以重新审视如何使用瞬态来提高插件性能的问题。

    正如我们之前提到的:

    在了解了可用的 API 后,我们将在本文后面重新讨论此主题,以了解它们如何增强缓存插件的性能。

    块引用>

    话虽如此,缓存和 WordPress 数据库与数据库中数据的位置有关。

    由于瞬态数据存储在与其他数据不同的位置,因此插件(例如基于 memcached 的插件)将查找存储瞬态数据的数据,然后将数据从该位置加载到内存中。

    因此,当请求数据时,将从内存中检索数据。如果数据不存在,则会从数据库中检索。

    最重要的是,如果编程正确,当从缓存中读取数据失败并从数据库中检索数据时,会将其插回缓存中,以便下次检索时将其插入到缓存中。内存中可用。

    最后,关于瞬态信息需要注意的关键一点是它有一个有效期。这意味着数据只会在数据库的该区域中存储特定的时间。

    为此,我们需要考虑到这一点。这意味着每当我们想要检索瞬态时,我们都需要确保它们存在。如果没有,我们会将它们从所在位置拉出,然后将它们存储在正确的位置。


    自定义查询

    至此,我们已经介绍了 WordPress 提供的许多与 Web 应用程序开发基础相关的功能。

    但是我们还有最后一个主要组件要介绍,那就是如何处理自定义查询。

    当然,有一些很棒的 AP​​I,因为它与运行专为 WordPress 特定目的而设计的查询相关,例如 WP_QueryWP_User_Query

    Ini jelas akan mengembalikan apa-apa jenis maklumat yang telah anda simpan, atau jika sementara telah tamat tempoh (iaitu lebih daripada 12 jam telah berlalu), fungsi itu akan mengembalikan boolean dengan Nilai FALSE.

    Ini adalah kunci untuk diingat, terutamanya jika anda cuba membaca nilai cache dan kemudian perlu mendapatkannya daripada sumber data lain (jika ia tidak tersedia dalam storan sementara).
Kami akan melihat contoh lengkap untuk melakukan ini sebelum akhir artikel ini. Padamkan sementara 🎜Akhir sekali, jika anda perlu memadamkan sementara untuk mengeluarkannya sepenuhnya, atau mengalih keluarnya sebelum tamat tempoh yang ditentukan supaya ia boleh digantikan dengan nilai lain, maka anda boleh menggunakan fungsi berikut: 🎜 🎜delete_transient('most_recent_user');🎜 🎜Selain itu, jika pemadaman nilai sementara tidak berjaya, fungsi akan mengembalikan FALSE jika tidak, ia akan mengembalikan FALSE; 🎜 🎜Tamat Tempoh Sementara🎜 🎜Mengenai menetapkan masa tamat tempoh untuk nilai cache, terdapat cara untuk menjadikan tetapan nilai lebih mudah daripada operasi integer asas muzik. 🎜 🎜Sebagai contoh, MINUTE_IN_SECONDS lebih mudah digunakan daripada 60, terutamanya apabila mendarab dengan minit, jam atau hari. 🎜 🎜 Bermula dengan WordPress 3.5, beberapa pemalar telah ditambahkan pada aplikasi teras untuk memudahkan pengiraan ini dibaca. 🎜 🎜Iaitu: 🎜
  • MINUTE_IN_SECONDS
  • HOUR_IN_SECONDS
  • DAY_IN_SECONDS
  • WEEK_IN_SECONDS
  • YEAR_IN_SECONDS
🎜Lebih mudah digunakan, membaca dan menulis, bukan? 🎜

Contoh lengkap menggunakan transients

🎜Pada ketika ini, saya fikir adalah penting untuk memahami cara menyediakan sementara bermula daripada menyimpan nilai dalam jadual pilihan. 🎜 🎜Berikut adalah urutan di mana kami melakukan ini: 🎜
  1. Kami akan menyimpan pilihan dalam jadual wp_options.
  2. Seterusnya, kami akan menyemak sama ada nilai itu wujud dalam cache.
  3. Jika nilai ada wujud dalam cache, kami akan memadamkannya jika tidak, kami akan menambahnya.
🎜Kemudian, pada separuh kedua kod, kami melakukan perkara berikut: 🎜
  1. Kami akan cuba mendapatkan semula fungsi nilai daripada cache.
  2. Jika nilai wujud dalam cache, kami akan kembali ke jadual pilihan namun, jika nilai itu wujud, maka kami akan menggunakannya.
🎜Dengan itu, mari kita lihat: 🎜 rrreee 🎜Sila ambil perhatian bahawa contoh ini tidak lengkap - ia boleh difaktorkan semula supaya lebih jelas dan kod harus diabstraksikan kepada fungsi yang lebih berkaitan dengan aplikasi, tetapi tujuan kod ini adalah untuk menunjukkan cara mengendalikan logik bersyarat, pilihan dan sementara. 🎜

Bagaimana ini berfungsi dengan pemalam?

🎜Kini, dengan semua yang dikatakan, kita boleh menyemak semula persoalan tentang cara menggunakan transien untuk meningkatkan prestasi pemalam. 🎜 🎜Seperti yang kami nyatakan sebelum ini: 🎜
🎜Kami akan menyemak semula topik ini kemudian dalam artikel ini selepas melihat API yang tersedia untuk melihat cara ia boleh meningkatkan prestasi pemalam caching. 🎜
🎜Setelah berkata demikian, caching dan pangkalan data WordPress mempunyai kaitan dengan lokasi data dalam pangkalan data. 🎜 🎜Memandangkan data sementara disimpan di lokasi yang berbeza daripada data lain, pemalam (seperti yang berdasarkan memcached) akan mencari data di mana data sementara disimpan dan memuatkan data ke dalam memori dari lokasi tersebut. 🎜 🎜Jadi apabila data diminta, data akan diambil dari memori. Jika data tidak wujud, ia diambil dari pangkalan data. 🎜 🎜Paling penting, jika diprogramkan dengan betul, apabila membaca data dari cache gagal dan mendapatkan semula data dari pangkalan data, ia akan dimasukkan semula ke dalam cache supaya ia akan dimasukkan ke dalam cache pada kali berikutnya ia diambil. terdapat dalam ingatan. 🎜 🎜Akhir sekali, perkara utama yang perlu diberi perhatian tentang maklumat sementara ialah ia mempunyai tarikh luput. Ini bermakna bahawa data hanya akan disimpan di kawasan pangkalan data itu untuk tempoh masa tertentu. 🎜 🎜Untuk ini, kita perlu mengambil kira perkara ini. Ini bermakna setiap kali kita ingin mendapatkan semula sementara, kita perlu memastikan ia wujud. Jika tidak, kami menariknya keluar dari lokasi mereka dan menyimpannya di lokasi yang betul. 🎜

Pertanyaan tersuai

🎜Pada ketika ini, kami telah merangkumi banyak ciri yang disediakan oleh WordPress berkaitan dengan asas pembangunan aplikasi web. 🎜 🎜Tetapi kami mempunyai satu komponen utama yang terakhir untuk dilindungi, dan itulah cara mengendalikan pertanyaan tersuai. 🎜 🎜Sudah tentu, terdapat beberapa API yang hebat kerana ia berkaitan dengan menjalankan pertanyaan yang direka untuk tujuan khusus WordPress, seperti WP_Query dan WP_User_Query, tetapi kami juga Anda akan belajar tentang beberapa alat asli yang membolehkan kami menulis pertanyaan tersuai ke pangkalan data menggunakan objek WordPress yang ditentukan serta kaedah yang membolehkan pembersihan data yang betul. 🎜 🎜Tetapi kami akan membincangkan semua ini dan banyak lagi dalam artikel seterusnya. 🎜 🎜🎜🎜🎜🎜

Atas ialah kandungan terperinci Panduan Pembangunan Aplikasi Web WordPress: Penjelasan terperinci tentang ciri yang tersedia (Bahagian 7): Teknologi caching. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!