• B* 登录了本站
  • m******n 加入了本站
  • B* 登录了本站
  • B* 登录了本站
  • B* 登录了本站
  • B* 登录了本站
  • B* 登录了本站
  • B* 登录了本站
  • B* 登录了本站
  • B* 登录了本站
提升性能:优化 PHP 脚本的最佳实践

提升性能:优化 PHP 脚本的最佳实践

提升性能:优化 PHP 脚本的最佳实践-1

优化 PHP 脚本对于构建快速高效的 Web 应用程序至关重要。没有人喜欢缓慢的网站,并且用户的耐心比以往任何时候都薄弱,提高性能应该成为任何开发人员的首要任务。今天,我们正在探索一些行之有效的方法来帮助您增强 PHP 脚本并确保您的应用程序平稳高效地运行。

提升性能:优化 PHP 脚本的最佳实践-2

目标受众:本文面向希望通过应用实用优化技术来提高 Web 应用程序性能的初级到中级PHP 开发人员

1.按照你的意思缓存它

提高 PHP 性能的最有效方法之一是通过缓存。这个想法很简单:存储结果并在需要时提供它们,而不是重复执行相同的脚本。像OPcache甚至Memcached这样的工具可以通过保存编译的脚本字节码来大大减少执行时间,这意味着 PHP 不需要在每次调用时重新编译代码。有效地实施缓存可以显着提高性能,尤其是对于内容较多的网站。

提升性能:优化 PHP 脚本的最佳实践-3

真实场景:想象一下运行一个高流量的电子商务网站。每个用户请求可能需要多次数据库调用来显示产品信息、用户详细信息和推荐。使用 OPcache 存储编译的字节码并使用 Memcached 缓存数据库结果,您可以大大缩短响应时间,确保客户不会因页面加载缓慢而放弃购物车。
初学者示例:假设您有一个产品列表页面,每次用户访问时都会从数据库中获取产品详细信息。通过将这些产品详细信息缓存几分钟,您可以减少数据库命中次数,从而加快页面加载时间并减轻服务器压力。

OPcache 的逐步设置

  1. 确保已安装 OPcache: sudo apt-get install php-opcache
  2. php.ini文件中启用 OPcache:
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000

3.重新启动您的Web服务器: sudo service apache2 restart

2.优化数据库查询

在大多数PHP应用程序中,数据库是性能瓶颈。确保您没有进行不必要的数据库调用 – 仅获取您需要的数据并利用索引字段来加速搜索操作。考虑连接表或使用准备好的语句,而不是循环访问多个数据库调用。一个优化的查询相当于一百多行 PHP 代码。

提升性能:优化 PHP 脚本的最佳实践-4

代码示例:

// Using a JOIN to optimize fetching blog post with comments
$query = "SELECT posts.*, comments.* FROM posts LEFT JOIN comments ON posts.id = comments.post_id WHERE posts.id = ?";
$stmt = $db->prepare($query);
$stmt->execute([$postId]);
$results = $stmt->fetchAll();

真实场景:想象一下运行一个高流量的电子商务网站。每个用户请求可能需要多次数据库调用来显示产品信息、用户详细信息和推荐。使用 OPcache 存储编译的字节码并使用 Memcached 缓存数据库结果,您可以大大缩短响应时间,确保客户不会因页面加载缓慢而放弃购物车。
初学者示例:假设您有一个产品列表页面,每次用户访问时都会从数据库中获取产品详细信息。通过将这些产品详细信息缓存几分钟,您可以减少数据库命中次数,从而加快页面加载时间并减轻服务器压力。

3.明智地使用内置函数

PHP 包含许多针对性能进行优化的内置函数。如果可能,请使用这些函数而不是编写自己的函数。例如,像in_array()array_search()这样的函数非常高效并且针对其目的进行了优化。如果有适合您需求的内置功能,请始终优先选择它而不是自定义解决方案。

提升性能:优化 PHP 脚本的最佳实践-5

代码示例

// Instead of writing a custom function to search for a value in an array
function customSearch($needle, $haystack) {
    foreach ($haystack as $value) {
        if ($value === $needle) {
            return true;
        }
    }
    return false;
}

// Use the built-in function
$found = in_array($needle, $haystack); // This is faster and more efficient

4.避免循环过载

嵌套循环因降低性能而臭名昭著。始终尝试最小化循环嵌套或找到减少迭代的方法。不要使用多个for循环,而是考虑使用带有逻辑中断的数组函数,例如array_map() 、 array_filter()foreach来保持操作高效。

代码示例:

// Using array_map to apply a function to each element
$numbers = [1, 2, 3, 4, 5];
$squaredNumbers = array_map(function($number) {
    return $number * $number;
}, $numbers);

5.分析你的代码

如果不知道瓶颈在哪里,如何进行优化? XdebugBlackfire等工具可帮助您了解代码的哪些部分占用了最多时间。分析工具可以清晰地显示函数执行时间、内存使用情况和其他性能指标。通过了解是什么拖慢了您的速度,您可以更有效地确定优化工作的目标。

真实场景:假设您有一个 API 端点响应时间过长。通过分析代码,您会发现涉及多个嵌套循环的特定函数消耗了大部分时间。您可以通过优化此函数或用更高效的算法替换它来显着缩短响应时间。

Xdebug 的初学者友好设置

安装Xdebug: pecl install xdebug

php.ini文件中启用Xdebug :

zend_extension="xdebug.so" 

xdebug.profiler_enable = 1

重新启动服务器并使用KCacheGrind等工具分析生成的 cachegrind 文件。

代码示例(使用 Xdebug):

// To profile your script with Xdebug, enable Xdebug profiling in your php.ini
xdebug.profiler_enable = 1;
// Analyze the generated cachegrind file using tools like KCacheGrind.

 6.明智地使用自动加载器

使用自动加载器有助于保持代码整洁,但过度使用会增加大量开销。确保只加载所需的内容,并将不必要的类保留在内存之外。考虑使用Composer 的内置自动加载优化来仅加载所需的课程。

真实场景:在具有许多不同模块的大型 Web 应用程序中,使用全局自动加载器可能会导致巨大的开销。例如,如果每个请求都加载所有类,则会不必要地增加内存使用量。相反,将 Composer 的自动加载配置为仅加载所需的内容,这可以显着减少加载时间和内存消耗。

初学者示例:使用 Composer 设置自动加载时,请使用:

{
  "autoload": {
    "psr-4": {
      "App\\": "src/"
    }
  }
}

编辑composer.json后,运行 composer dump-autoload --optimize 以确保只加载必要的文件。

7.利用输出缓冲

输出缓冲是 PHP 性能优化的一个鲜为人知的技巧。不要将数据直接逐行发送到客户端,而是启用输出缓冲来收集所有输出并一次性发送。这减少了来回行程的次数,从而缩短了装载时间。

真实场景:对于提供动态内容的高流量博客网站,启用输出缓冲可以帮助显着减少加载时间。通过收集所有内容并立即发送,服务器可以最大限度地减少与客户端的交互,尤其是在生成大型 HTML 页面时。

代码示例

// Enable output buffering
ob_start();
echo "This is some content.";
echo " More content.";
// Send all output at once
echo ob_get_clean();

Beginner Example: For a simple form submission, instead of echoing each response line by line, use output buffering to collect the output and send it in one go. This reduces server-client interaction time.

8.最小化文件 I/O

访问文件的性能代价可能很高,尤其是在处理大型数据集时。在可能的情况下,尽量减少文件读取和写入。将经常访问的文件保留在内存中或使用缓存机制以避免冗余 I/O 操作。此外,如果您要包含多个 PHP 文件,请尽可能将它们组合起来,以减少includerequire语句的数量。

真实场景:在需要生成大型 CSV 文件的报告系统中,首先收集内存中的所有数据,然后一次性写入,从而最大限度地减少文件写入。这可以节省大量 I/O 时间并提高脚本性能。

初学者示例:如果您的脚本重复从文件读取配置设置,请考虑读取该文件一次并将数据存储在数组中。这样,您就可以避免多次打开和读取文件的开销。

9.关闭生产中的调试

确保在生产环境中关闭错误报告和调试工具。它们不仅会带来安全风险,还会通过生成不必要的日志和输出来减慢应用程序的速度。

10.使用内容交付网络(CDN)

虽然这与您的 PHP 代码没有直接关系,但使用CDN可以通过卸载静态资产和减少服务器负载来极大地提高 Web 应用程序的性能。这使您的服务器可以专注于执行 PHP 脚本,从而获得更快、响应更灵敏的体验。

 结论

性能优化不仅仅是编写有效的代码;这是关于编写高效工作的代码。通过遵循这些最佳实践(缓存结果、优化数据库交互、利用内置函数以及分析脚本),您可以确保您的 PHP 应用程序保持敏捷并提供一流的用户体验。请记住,速度更快的网站对您和您的用户来说都是更快乐的网站。

您是否尝试过这些技术,或者您有最喜欢的优化 PHP 脚本的方法吗?在下面发表评论并分享您的见解!

声明:本站所有资源均为互联网收集而来和网友投稿,仅供学习交流使用,如资源适合请购买正版体验更完善的服务;如有侵犯到您的权益,可联系我们删除,给您带来的不便我们深表歉意。版权声明点此了解!
本站分享的WordPress主题/插件均遵循 GPLv2 许可协议(开源软件)。相关介绍资料仅供参考,实际版本可能因版本迭代或开发者调整而产生变化。涉及第三方原创图像、设计模板、远程服务等内容的使用,需获得作者授权。
0

评论0

请先

站点公告

通过其他平台(微信等)有购买过的用户,请注册的时候使用对应的来源平台的用户名,将会在24小时内随机发送1~9宝库币(站内余额,可直接用于购买站内资源)。
没有账号?注册  忘记密码?