0

0

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

WBOY

WBOY

发布时间:2023-08-30 12:37:02

|

1004人浏览过

|

来源于php中文网

原创

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 中引入的。此处提供了完整的常量列表。

尽管这就是我们设置瞬态的方式,但这仍然无法解释我们如何管理瞬态(如果瞬态不存在或已存在)。

我们将在本文后面详细介绍这一点。

检索瞬态

当涉及到检索瞬态时,它与检索元数据或选项等内容非常相似。我的意思是,我们只需要知道检索信息的密钥即可。

因此,为了与上面的示例保持一致,我们可以通过以下调用检索应用程序的最新用户:

MaxAI
MaxAI

MaxAI.me是一款功能强大的浏览器AI插件,集成了多种AI模型。

下载

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 );

}

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


这如何与插件配合?

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

正如我们之前提到的:

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

块引用>

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

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

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

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

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

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


自定义查询

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

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

当然,有一些很棒的 AP​​I,因为它与运行专为 WordPress 特定目的而设计的查询相关,例如 WP_QueryWP_User_Query,但我们还将了解一些允许我们编写的本机工具使用定义的 WordPress 对象以及允许正确数据清理的方法对数据库进行自定义查询。

但我们将在下一篇文章中介绍所有这些内容以及更多内容。

WPS零基础入门到精通全套教程!
WPS零基础入门到精通全套教程!

全网最新最细最实用WPS零基础入门到精通全套教程!带你真正掌握WPS办公! 内含Excel基础操作、函数设计、数据透视表等

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

76

2026.03.13

Python异步编程与Asyncio高并发应用实践
Python异步编程与Asyncio高并发应用实践

本专题围绕 Python 异步编程模型展开,深入讲解 Asyncio 框架的核心原理与应用实践。内容包括事件循环机制、协程任务调度、异步 IO 处理以及并发任务管理策略。通过构建高并发网络请求与异步数据处理案例,帮助开发者掌握 Python 在高并发场景中的高效开发方法,并提升系统资源利用率与整体运行性能。

117

2026.03.12

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

350

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

63

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

109

2026.03.09

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

108

2026.03.06

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

243

2026.03.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

684

2026.03.04

AI安装教程大全
AI安装教程大全

2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

179

2026.03.04

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号