使用 PHP 8.3 加速你的应用程序

发布日期:作者:

Make your app faster with PHP 8.3 image

PHP 8.3 是 PHP 的最新版本。它拥有激动人心的新功能和性能方面的重大改进。通过升级到 8.3,您可以显着提高速度。在这篇文章中,我们将深入探讨 PHP 8.3 如何改变游戏规则。它可以加速应用程序的性能。

PHP 8.3 中的新功能?

直接性能增强

PHP 8.3 引入了优化,从而提高了应用程序的运行时效率。这种性能提升不仅仅是微小的升级。它是 PHP 引擎的重大改进。这将导致更快的执行速度,并使用更少的资源。

几个关键改进实现了这种提升。

即时 (JIT) 编译器已针对更高效进行了优化。脚本的执行速度更快,并消耗更少的 CPU 时间。这对于资源密集型任务尤其有利。

PHP 改进了处理操作码(PHP 字节码中的指令)的方式。8.3 版本使用更有效的方式来解释和执行这些操作码。这将减少脚本的执行时间。

PHP 8.3 增强了垃圾回收机制,该机制负责释放未使用的对象占用的内存。这将导致更有效的内存使用,并且可以显着提高内存密集型应用程序的性能。

其他改进包括针对处理数组的优化以及增强的类型系统。预加载升级使服务器管理员能够在服务器启动时将 PHP 代码加载并编译到内存中。这将减少每次请求编译脚本的开销。这将导致更快的响应时间。

这些升级意味着您现有的 PHP 代码将在 PHP 8.3 上运行得更快,并使用更少的资源。所有这些都无需对您的代码进行任何更改!

间接性能提升

PHP 8.3 还改进了语法、方法和类型安全性。这些新功能间接提高了性能。它们减少了生产错误,并提高了开发人员的效率。这使您能够更快地发布更新,并更有效地解决性能问题。

一些关键改进包括

  • 只读属性的深层克隆:PHP 8.3 允许使用 __clone 方法修改只读属性一次。这允许对这些属性进行深层克隆。但原始属性保持不变。
  • 随机性改进:随机扩展在 PHP 8.3 中获得了进一步改进。值得注意的是,Randomizer 类新增了 getBytesFromString() 方法。此方法从给定的一组字符生成随机字符串。此外,该类现在还包含 getFloat()nextFloat() 方法。它们生成随机浮点值。
  • 动态获取类常量和枚举成员。 动态获取简化了获取类常量和枚举成员的过程。它通过使用变量名来实现。它使语法比以前版本更直观。
  • 在 PHP 8.3 中,unserialize() 将始终发出 E_WARNING 当遇到问题时。这将改进 unserialize() 错误处理。在以前的版本中,它有时会发出 E_NOTICE
  • PHP 8.3 对 range() 函数进行了一些更改。它包括针对某些类型的输入的新错误和警告行为。
  • 8.3 版本添加了两个新的 ini 指令来检测堆栈溢出。它们是 zend.max_allowed_stack_sizezend.reserved_stack_size。这旨在通过防止堆栈溢出引起的段错误来简化调试。

您可以在 发行说明 中找到所有新功能的完整列表。

如何使用 PHP 8.3 加速你的应用程序

将 PHP 版本升级到 8.3

利用 PHP 8.3 的强大功能的第一步是 升级 您当前的 PHP 环境到 8.3 版本。此升级对于访问新功能和性能改进至关重要。通过升级到 8.3,您可以享受 高达 42% 的性能提升,具体取决于您的堆栈。

有关如何升级的指南,请参阅 官方迁移指南。注意可能适用于您的应用程序的任何重大更改。

使用新功能更快地构建和发布

新的语法和类型安全性功能可以显着增强开发人员体验。这将提高性能,因为开发人员可以快速识别和解决性能问题。以下是一些利用新功能来加快开发周期的示例。

示例 1:使用类型化类常量

类型化类常量 确保您的代码在整个应用程序中都正确使用常量。此功能可以防止运行时错误。它在缓存等关键领域尤其有用。因此,它使您的应用程序更稳定,速度更快。

class CacheSettings {
public const int MAX_LIFETIME = 3600; // Typed as integer
// ... other constants
}
 
// Usage
$cacheLifetime = CacheSettings::MAX_LIFETIME;

示例 2:使用 #[\Override] 确保正确的方法覆盖

class BaseClass {
public function compute() {
// Base implementation
}
}
 
class ChildClass extends BaseClass {
#[\Override]
public function compute() {
// Correctly overridden method
}
}

在 PHP 8.3 中,您将 #[\Override] 属性 应用于子类方法。它确保 ChildClass 中的 compute() 方法覆盖 BaseClass 中的父方法。这可以防止错误,并在复杂的类层次结构中维护性能完整性。

示例 3:改进的错误处理

try {
// Code that may throw an exception
} catch (FirstException | SecondException $e) {
// Handle multiple exceptions
}

PHP 8.3 可以在一个块中捕获许多异常。它简化了错误处理,节省时间并减少代码复杂性。

示例 4:扩展的类型支持

function addNumbers(int|float $a, int|float $b): int|float {
return $a + $b;
}

PHP 8.3 通过引入扩展的类型支持来增强其类型系统。扩展的类型支持包括在函数签名中使用联合类型。上面的代码演示了此功能。它允许变量和返回值接受多种类型。在这里,参数和返回值可以是整数或浮点数。这提供了更大的灵活性和精度。这种增强导致更清晰、自文档的代码,减少了与类型相关的错误。PHP 8.3 允许更精确和灵活的函数定义。这提高了代码的健壮性和通用性。它还有助于及早检测与类型相关的错误。这将有助于应用程序的稳定性和效率。

示例 5:简化 JSON 验证

在 PHP 8.3 中,新的 json_validate() 函数 简化了 JSON 数据的验证。以前,开发人员必须依赖自定义验证逻辑或外部库。这既耗时又容易出错。现在您可以使用 json_validate() 检查 JSON 字符串的格式和结构。这是一个简单的函数调用。此函数简化了 JSON 数据处理。它在大量使用 JSON 的应用程序(如 API)中尤其有用。它减少了复杂性,提高了代码可靠性。

以前的 PHP 版本

function json_validate(string $string): bool {
json_decode($string);
 
return json_last_error() === JSON_ERROR_NONE;
}
 
var_dump(json_validate('{ "test": { "foo": "bar" } }')); // true

PHP 8.3

var_dump(json_validate('{ "test": { "foo": "bar" } }')); // true

一般的 PHP 性能增强

您可以通过以下策略进一步提高应用程序的性能。这些策略优化了应用程序堆栈的其他层,并确保了全面提高性能的方法。

缓存策略

实施缓存策略对于减少服务器负载至关重要。它还可以加快响应时间。

  • Opcode 缓存可以大大减少 PHP 的编译时间。使用OPcache等工具来存储预编译的脚本字节码。这意味着 PHP 不必每次请求时都重新编译脚本。
  • 对象缓存可以加快数据访问速度。它通过将经常使用的数据对象存储在内存中来实现。像RedisMemcached这样的工具可以做到这一点。这减少了每次请求都需要从数据库中获取数据的需要,而这很耗时。

过渡到 HTTP/2

HTTP/2 在 HTTP/1.1 的基础上引入了许多改进,最值得注意的是

  • 多路复用使单个连接能够承载多个客户端-服务器请求和响应。这减少了多个 TCP 连接导致的延迟。
  • 服务器推送使服务器能够主动向客户端发送资源。这减少了后续请求的等待时间。

优化数据库查询和代码

数据库交互通常是 Web 应用程序的瓶颈。优化它们可以产生显著的性能提升。

  • 索引:确保您的数据库表被正确索引。索引可以显著加快数据检索时间。
  • 查询优化:定期分析和优化您的 SQL 查询。当有更简单的替代方案可用时,避免不必要的数据获取和复杂的联接。
  • 代码剖析:使用剖析工具来识别低效的 PHP 代码。像 Xdebug 这样的工具可以帮助您查明代码中的慢速函数和循环。

通过关注这些领域,您可以极大地提高 PHP 应用程序的性能。但是,您可能想知道,“我如何才能在第一时间找出瓶颈在哪里?”这就是应用程序性能监控 (APM) 的作用!

为什么 APM 可以帮助实现“更好的”应用程序

应用程序性能监控 (APM) 工具提供了宝贵的应用程序性能洞察力。

实时监控。

APM 工具中的实时监控可以帮助您使 PHP 应用程序更快。它涉及对应用程序性能指标的持续观察和分析。

此过程包括跟踪关键指标。这些指标包括响应时间、内存使用情况、服务器负载和数据库查询效率。这些指标允许快速识别性能瓶颈。性能瓶颈是指应用程序中性能较差的部分。通过实时检测这些问题,您可以快速诊断和解决它们。这减少了停机时间并增强了用户体验。

提供此功能的 APM 工具的一个示例是Scout APM。它专门为 PHP 应用程序提供实时监控。Scout 使开发人员能够识别和修复出现的与性能相关的问题。

详细跟踪洞察

详细跟踪洞察是 APM 工具中的一项关键功能。它们提供深入的应用程序分析。

此功能提供了对特定请求或事务执行情况的详细洞察。它允许您跟踪请求从开始到结束的旅程。它将过程分解成各个组件和操作。这些细节揭示了导致性能问题的代码行或数据库查询的准确位置。

有了这些洞察力,APM 使开发人员能够识别和纠正低效率或错误。使您能够微调应用程序以实现最佳性能。

结论

PHP 8.3 不仅仅是另一个更新;它是 PHP 为 Web 应用程序提供动力的方式的一次变革性转变。您应该拥抱 PHP 8.3 并遵循此处概述的性能增强提示。这样做可以确保您的应用程序运行得更快、更高效。此外,您的用户将享受更优越的用户体验。最后,将 Scout APM 等 APM 工具集成到您的工作流程中。APM 工具将进一步简化您的开发过程并提高应用程序的性能。

Sarah Morgan photo

萨拉在软件行业拥有超过 18 年的经验。除了她目前担任 Scout 的高级产品经理职位之外,她还是 Product School 的特邀演讲者,以及 Tapple.io 的产品战略顾问。

分类
Cube

Laravel 时事通讯

加入 40,000 多名其他开发者,永不错过新的技巧、教程等等。

Laravel Forge logo

Laravel Forge

轻松创建和管理您的服务器,并在几秒钟内部署您的 Laravel 应用程序。

Laravel Forge
Tinkerwell logo

Tinkerwell

Laravel 开发人员必备的代码运行器。使用 AI、自动补全和对本地和生产环境的即时反馈进行调试。

Tinkerwell
No Compromises logo

没有妥协

Joel 和 Aaron 是来自 No Compromises 播客的两位经验丰富的开发人员,现在可以为您的 Laravel 项目聘用他们。⬧ 固定费率为每月 7500 美元。⬧ 没有冗长的销售流程。⬧ 没有合同。⬧ 100% 退款保证。

没有妥协
Kirschbaum logo

Kirschbaum

提供创新和稳定性,以确保您的 Web 应用程序取得成功。

Kirschbaum
Shift logo

Shift

正在运行旧版本的 Laravel 吗?即时、自动化的 Laravel 升级和代码现代化,使您的应用程序保持新鲜。

Shift
Bacancy logo

Bacancy

使用经验丰富的 Laravel 开发人员 (4-6 年经验) 为您的项目提供动力,每月只需 2500 美元。获得 160 小时的专业知识和 15 天的无风险试用。立即安排电话会议!

Bacancy
Lucky Media logo

Lucky Media

立即获得 Lucky - Laravel 开发的理想选择,拥有十多年的经验!

Lucky Media
Lunar: Laravel E-Commerce logo

Lunar: Laravel 电子商务

Laravel 的电子商务。一个开源软件包,为 Laravel 带来了现代无头电子商务功能的力量。

Lunar: Laravel 电子商务
LaraJobs logo

LaraJobs

官方 Laravel 招聘网站

LaraJobs
SaaSykit: Laravel SaaS Starter Kit logo

SaaSykit: Laravel SaaS 启动套件

SaaSykit 是一个 Laravel SaaS 启动套件,包含运行现代 SaaS 所需的所有功能。支付、精美结账、管理面板、用户仪表板、身份验证、就绪组件、统计数据、博客、文档等等。

SaaSykit: Laravel SaaS 启动套件
Rector logo

Rector

您无缝升级 Laravel、降低成本和加快创新以帮助成功公司的合作伙伴

Rector
MongoDB logo

MongoDB

通过 MongoDB 和 Laravel 的强大集成来增强您的 PHP 应用程序,使开发人员能够轻松高效地构建应用程序。在使用熟悉的 Eloquent API 的同时,支持事务、搜索、分析和移动用例。探索 MongoDB 的灵活、现代数据库如何改变您的 Laravel 应用程序。

MongoDB
Maska is a Simple Zero-dependency Input Mask Library image

Maska 是一个简单的零依赖输入掩码库

阅读文章
Add Swagger UI to Your Laravel Application image

将 Swagger UI 添加到您的 Laravel 应用程序

阅读文章
Assert the Exact JSON Structure of a Response in Laravel 11.19 image

在 Laravel 11.19 中断言响应的精确 JSON 结构

阅读文章
Build SSH Apps with PHP and Laravel Prompts image

使用 PHP 和 Laravel Prompts 构建 SSH 应用程序

阅读文章
Building fast, fuzzy site search with Laravel and Typesense image

使用 Laravel 和 Typesense 构建快速、模糊的站点搜索

阅读文章
Add Comments to your Laravel Application with the Commenter Package image

使用 Commenter 包为您的 Laravel 应用程序添加评论

阅读文章