WordPress Web应用开发指南:可用功能详解(第7部分):缓存技术
在构建 Web 应用程序时,我们必须时刻注意的最重要的事情之一就是性能。
正如他们所说,性能是一项功能。
无论您是设计师、开发人员还是用户,您都会直观地知道这一点:在应用程序方面,我们讨厌等待。当事情执行得不够快,或者我们必须等待比我们认为应该等待的时间更长的时间时,我们会感到沮丧。
为此,大多数现代 Web 开发框架都可以通过使用某些 API 来实现某种类型的缓存,而 WordPress(尽管是一个基础)也不例外。
因此,当我们继续讨论为什么 WordPress 是作为 Web 应用程序开发基础的可行选择时,我们将了解核心应用程序提供的 API、它们的工作原理以及我们如何利用它们来发挥我们的优势,以及如何通过额外的缓存插件进一步提高性能。
为什么缓存很重要?
简而言之,缓存很重要,因为它允许我们将经常检索的数据存储在内存中的某个位置,以便可以快速检索。
当您从更大的范围来看时,当多个用户查看一个网站时,这一点变得越来越明显。我的意思是,如果一个人(或极少数人)访问一个网站,并且该网站将其数据存储在数据库中,那么每次加载页面时,都必须从该网站检索该信息。数据库,插入到页面中,然后返回给用户。
如果建立了一定级别的缓存,则不必频繁地调用数据库。相反,可以从内存中的某个区域提取信息,从而加快检索速度,从而加快页面加载时间。
我们将在本文后面详细介绍这方面的技术细节。
插件怎么样?
如果您已经使用 WordPress 很长时间,那么您可能熟悉许多可用的缓存插件。
这些无疑是加速网站和/或 Web 应用程序速度的绝佳解决方案,但它确实提出了一个问题:如果可以使用插件来执行此操作,那么我们为什么要担心它?
当然,这是一个有效的问题,但插件只能自己完成这么多工作。
开发人员可以以这样的方式构建他们的应用程序,使它们不仅在没有缓存机制的情况下表现良好,而且还可以通过所述缓存插件得到极大的增强。
我的意思是,这些缓存插件会查找主题和应用程序要存储在某个位置的数据,如果我们可以在自己的工作上下文中以编程方式执行此操作,那么这些插件将产生更大的效果性能。
在了解了可用的 API 后,我们将在本文后面重新讨论此主题,看看它们如何提高缓存插件的性能。
瞬态 API
为了在应用程序中引入第一级缓存,我们需要利用 WordPress 的 Transients API。首先,请注意瞬态的官方定义是“仅存在很短时间的事物。”
正如食品法典中的定义:
[Transient API] 提供了一种简单且标准化的方法,通过为其指定自定义名称和时间范围(在该时间范围之后数据将过期并被删除),将缓存数据临时存储在数据库中。
但这到底是什么意思呢?毕竟,数据仍然存储在数据库中,那么为什么这比将数据存储在任何其他数据库表(例如 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 常量是 WordPress 3.5 中引入的。此处提供了完整的常量列表。
尽管这就是我们设置瞬态的方式,但这仍然无法解释我们如何管理瞬态(如果瞬态不存在或已存在)。
我们将在本文后面详细介绍这一点。
检索瞬态
当涉及到检索瞬态时,它与检索元数据或选项等内容非常相似。我的意思是,我们只需要知道检索信息的密钥即可。
因此,为了与上面的示例保持一致,我们可以通过以下调用检索应用程序的最新用户:
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
更容易使用、阅读和编写,不是吗?
使用瞬态的完整示例
此时,我认为重要的是要了解如何从在选项表中存储值开始设置瞬态。
以下是我们执行此操作的顺序:
- 我们将在 wp_options 表中保存一个选项。
- 接下来,我们将检查缓存中是否存在该值。
- 如果该值确实存在于缓存中,我们将删除它;否则,我们将添加它。
然后,在代码的后半部分,我们将执行以下操作:
- 我们将尝试从缓存中检索值函数。
- 如果该值存在于缓存中,我们将回退到选项表;但是,如果该值确实存在,那么我们将使用它。
话虽如此,让我们看一下:
$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 ); }
请注意,这个示例并不完整 - 它可以重构得更清晰一些,并且代码应该抽象为与应用程序更相关的函数,但此代码的目的是展示如何处理条件逻辑、选项和瞬态。
这如何与插件配合?
现在,综上所述,我们可以重新审视如何使用瞬态来提高插件性能的问题。
正如我们之前提到的:
在了解了可用的 API 后,我们将在本文后面重新讨论此主题,以了解它们如何增强缓存插件的性能。
块引用>话虽如此,缓存和 WordPress 数据库与数据库中数据的位置有关。
由于瞬态数据存储在与其他数据不同的位置,因此插件(例如基于 memcached 的插件)将查找存储瞬态数据的数据,然后将数据从该位置加载到内存中。
因此,当请求数据时,将从内存中检索数据。如果数据不存在,则会从数据库中检索。
最重要的是,如果编程正确,当从缓存中读取数据失败并从数据库中检索数据时,会将其插回缓存中,以便下次检索时将其插入到缓存中。内存中可用。
最后,关于瞬态信息需要注意的关键一点是它有一个有效期。这意味着数据只会在数据库的该区域中存储特定的时间。
为此,我们需要考虑到这一点。这意味着每当我们想要检索瞬态时,我们都需要确保它们存在。如果没有,我们会将它们从所在位置拉出,然后将它们存储在正确的位置。
自定义查询
至此,我们已经介绍了 WordPress 提供的许多与 Web 应用程序开发基础相关的功能。
但是我们还有最后一个主要组件要介绍,那就是如何处理自定义查询。
当然,有一些很棒的 API,因为它与运行专为 WordPress 特定目的而设计的查询相关,例如 WP_Query 和 WP_User_Query,但我们还将了解一些允许我们编写的本机工具使用定义的 WordPress 对象以及允许正确数据清理的方法对数据库进行自定义查询。
但我们将在下一篇文章中介绍所有这些内容以及更多内容。
WordPress Web应用开发指南:可用功能详解(第7部分):缓存技术的详细内容,更多请关注红帽云邮其它相关文章!