”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 提高 PHP 效率:经过验证的性能优化技术

提高 PHP 效率:经过验证的性能优化技术

发布于2024-11-08
浏览:349

Boosting PHP Efficiency: Proven Techniques for Performance Optimization

优化 PHP 性能可确保我们的 Web 应用程序平稳运行、快速响应并有效处理流量。下面是关于如何有效地最大化 PHP 性能的详细分步指南,并为每个优化策略提供了实践示例。


第 1 部分:更新到最新的稳定 PHP 版本

第 1 步:检查当前 PHP 版本

首先检查系统上安装的当前 PHP 版本:

php -v

如果您的版本已过时,升级到最新的稳定 PHP 版本通常会带来性能改进和新功能。

第 2 步:升级 PHP(如果需要)

要安装最新的 PHP 版本,请在 Ubuntu 上运行以下命令:

sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt install php8.2 # Replace with the latest version

为什么?

每个新的 PHP 版本都会带来性能提升。例如,与 PHP 5.x 相比,PHP 7.x 的执行时间提高了近 50%,而 PHP 8.x 也有进一步显着的改进。


第 2 部分:使用操作码缓存 (PHP Opcache)

第 1 步:在 PHP 中启用 Opcache

Opcache 将预编译的脚本字节码存储在内存中,减少了 PHP 在每个请求上加载和解析脚本的需要。要启用它:

  1. 打开您的 php.ini 文件:
   sudo nano /etc/php/8.2/fpm/php.ini # Use your PHP version
  1. 找到 Opcache 设置并启用它:
   opcache.enable=1
   opcache.memory_consumption=128
   opcache.max_accelerated_files=10000
   opcache.revalidate_freq=0
  1. 重新启动 PHP-FPM 和 Nginx:
   sudo systemctl restart php8.2-fpm
   sudo systemctl restart nginx

为什么?

Opcache 无需在每个请求上编译 PHP 代码,从而显着提高性能,从而显着减少 CPU 使用率和请求时间。


第 3 部分:优化数据库查询

第 1 步:为数据库表建立索引

不正确的数据库索引会减慢查询执行速度。确保对 WHERE 子句中使用的列或用于排序的列建立索引。

MySQL 查询示例:

CREATE INDEX idx_user_email ON users(email);

第 2 步:使用查询分析

分析您的数据库查询以查找瓶颈。例如,Laravel 的 Eloquent ORM 允许查询分析:

DB::enableQueryLog();
$users = DB::table('users')->get();
dd(DB::getQueryLog());

为什么?

通过优化数据库查询并对关键列建立索引,您可以大大减少查询执行时间,从而加快 PHP 应用程序的速度。


第 4 部分:启用 Gzip 压缩

第 1 步:在 Nginx 中启用 Gzip

Gzip 减少了从服务器发送到客户端的数据大小,从而使页面加载速度更快。要在 Nginx 中启用它:

  1. 打开Nginx配置文件:
   sudo nano /etc/nginx/nginx.conf
  1. 添加以下 Gzip 设置:
   gzip on;
   gzip_comp_level 2;
   gzip_types text/css application/javascript application/json image/svg xml;
   gzip_min_length 256;
  1. 保存并重启Nginx:
   sudo systemctl restart nginx

为什么?

启用 Gzip 压缩可减少需要传输的数据量,从而加快页面加载时间并减少带宽使用。


第 5 部分:使用内容交付网络 (CDN)

步骤 1:为静态资产配置 CDN

Cloudflare 或 Amazon CloudFront 等 CDN 在全球分布式服务器上存储 CSS、JavaScript 和图像等静态资产的副本,使它们更接近用户。

例子:

为什么?

通过将静态内容卸载到 CDN,您可以减少服务器上的负载,并显着缩短全球用户的响应时间。


第 6 部分:使用 PHP-FPM 和调优

第1步:安装并配置PHP-FPM

确保您使用的是 PHP-FPM (FastCGI Process Manager),它针对高负载环境进行了更好的优化:

sudo apt install php8.2-fpm

第 2 步:调整 PHP-FPM 设置

您可以通过调整 PHP-FPM 池配置文件中的 pm.max_children、pm.start_servers、pm.min_spare_servers 和 pm.max_spare_servers 设置来调整 PHP-FPM 设置以有效地处理更多请求。

编辑池配置文件:

sudo nano /etc/php/8.2/fpm/pool.d/www.conf

根据可用内存和流量增加 pm.max_children:

pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20

重启 PHP-FPM 和 Nginx:

sudo systemctl restart php8.2-fpm
sudo systemctl restart nginx

为什么?

PHP-FPM 允许您的 PHP 进程高效处理更多并发请求,减少重负载下的服务器响应时间。


第 7 部分:缩小和捆绑资产

第 1 步:缩小 CSS、JavaScript 和 HTML

通过删除不必要的空格和注释来缩小 CSS、JavaScript 和 HTML 文件,从而减少文件大小。

使用 Laravel MixGulp:
等工具

npm install laravel-mix --save-dev

Laravel 的示例 webpack.mix.js 文件:

const mix = require('laravel-mix');

mix.js('resources/js/app.js', 'public/js')
    .sass('resources/sass/app.scss', 'public/css')
    .minify('public/js/app.js')
    .minify('public/css/app.css');

第 2 步:启用浏览器缓存

在 Nginx 配置文件中,添加静态资源的缓存:

location ~* \.(css|js|jpg|jpeg|png|gif|ico|woff|woff2)$ {
    expires 1y;
    access_log off;
    add_header Cache-Control "public";
}

为什么?

缩小和捆绑资源,并启用浏览器缓存,可以减小文件大小并缩短加载时间,从而提高应用程序速度。


第 8 部分:使用 Redis 或 Memcached 进行缓存

第1步:安装Redis

安装Redis:

sudo apt install redis-server

第 2 步:配置 Laravel 以使用 Redis

在 Laravel 中,打开 .env 文件并将 Redis 配置为缓存驱动程序:

CACHE_DRIVER=redis

第 3 步:缓存数据库查询

使用查询缓存来加速重复的数据库查询:

$users = Cache::remember('users', 60, function() {
    return DB::table('users')->get();
});

为什么?

通过缓存数据库查询,您可以减少数据库负载并显着缩短频繁访问数据的响应时间。


第 9 部分:优化自动加载器

第 1 步:使用 Composer 的 Autoloader 优化

优化 Composer 自动加载器以进行生产:

composer install --optimize-autoloader --no-dev

第 2 步:清除未使用的服务提供商

在 Laravel 中,禁用 config/app.php 中任何未使用的服务提供程序,以减少内存使用并加快应用程序启动时间。

为什么?

自动加载优化编译类映射,使类加载更快。禁用未使用的服务有助于应用程序使用更少的资源。


第 10 部分:监控和分析

第 1 步:使用 Laravel Telescope(或其他分析工具)

安装 Laravel Telescope 来分析您的应用程序:

composer require laravel/telescope
php artisan telescope:install
php artisan migrate
php artisan serve

第 2 步:使用 New Relic 或 Blackfire 进行高级分析

您可以集成New RelicBlackfire等第三方工具来分析应用程序瓶颈、数据库性能等。

为什么?

监控和分析工具可帮助识别 PHP 应用程序中的缓慢查询、内存泄漏和瓶颈,使您能够主动修复性能问题。


结论:

通过执行这些步骤,您可以显着提高 PHP 应用程序的性能。从更新 PHP 和启用操作码缓存到优化数据库查询和配置 PHP-FPM,每一步都有助于提高应用程序的响应速度和可扩展性。

版本声明 本文转载于:https://dev.to/mdarifulhaque/boosting-php-efficiency-proven-techniques-for-performance-optimization-4plh?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 如何使用 Selenium 在 Google Chrome 中模拟 Microsoft Edge Mobile?
    如何使用 Selenium 在 Google Chrome 中模拟 Microsoft Edge Mobile?
    使用 Selenium 更改 Google Chrome 中的用户代理在 Selenium 自动化脚本中,为浏览器窗口设置特定的用户代理对于模拟设备行为和确保网站渲染至关重要正如预期的那样。在这种情况下,我们的目标是将 Google Chrome 中的用户代理修改为 Microsoft Edge M...
    编程 发布于2024-11-08
  • 哪种 MySQL 获取函数适合您的 PHP 应用程序:`mysql_fetch_array`、`mysql_fetch_assoc` 和 `mysql_fetch_object` 的比较
    哪种 MySQL 获取函数适合您的 PHP 应用程序:`mysql_fetch_array`、`mysql_fetch_assoc` 和 `mysql_fetch_object` 的比较
    比较 mysql_fetch_array、mysql_fetch_assoc 和 mysql_fetch_object:综合分析mysql 函数系列在从 MySQL 查询中检索结果中起着至关重要的作用在 PHP 中。在这些函数中,mysql_fetch_array、mysql_fetch_assoc...
    编程 发布于2024-11-08
  • Lerna – Monorepo 管理的关键
    Lerna – Monorepo 管理的关键
    欢迎回到莫诺雷波城堡! 现在城堡已经建成,每个房间(项目)都已就位。但如果没有正确的管理,事情可能会变得混乱。谁来帮助城堡顺利运转?这时勒纳登场了——一位强大的巫师,拥有神奇的命令,可以让一切保持秩序。 Lerna 是您在 monorepo 土地上的向导,确保所有房间(项目)同步,所有包都链接,并且...
    编程 发布于2024-11-08
  • 如何在 PHP 中循环嵌套数组并显示特定值?
    如何在 PHP 中循环嵌套数组并显示特定值?
    PHP foreach 与嵌套数组:综合指南在 PHP 中,浏览嵌套数组可能是一个常见的挑战。本讨论重点讨论特定场景,您的目标是显示嵌套数组的子集,特别是第二个嵌套数组中的值。将 foreach 与嵌套数组结合使用要使用 foreach 处理嵌套数组,可以采用以下方法:示例:$tmpArray = ...
    编程 发布于2024-11-08
  • 提升 Web 性能:前端开发人员指南
    提升 Web 性能:前端开发人员指南
    大家好!自从我上次写博客以来已经有一段时间了,我承认,这让我有点难过。现实是,有太多东西需要学习,有时感觉永远没有足够的时间来深入了解所有内容。我在跟谁开玩笑呢?事实是,我最近拖延得很厉害。 但最近,我一直在探索网络性能——这对于任何前端开发人员来说都是一个至关重要的话题——我很高兴分享我所学到的东...
    编程 发布于2024-11-08
  • 如何利用先进的加密技术增强数据保护?
    如何利用先进的加密技术增强数据保护?
    对称密钥加密:FernetPython 拥有强大的加密库,提供 Fernet,这是一种安全、最佳实践的加密方案。 Fernet 采用 AES CBC 加密、HMAC 签名以及版本和时间戳信息来保护数据。建议使用 Fernet.generate_key() 生成密钥。from cryptography...
    编程 发布于2024-11-08
  • 什么是本地主机?本地主机作为开发人员的用途
    什么是本地主机?本地主机作为开发人员的用途
    您有没有想过当开发人员在将网站上线之前测试网站时会发生什么?或者网络管理员如何检查他们的系统是否正常工作?答案在于一个强大但经常被误解的概念,称为 localhost。让我们深入了解 localhost 是什么、它为何重要以及它如何变得非常有用。 什么是本地主机? 用最简单的术语来说...
    编程 发布于2024-11-08
  • 为什么 Debian 和 Ubuntu Docker 容器之间的标准输出缓冲不同?
    为什么 Debian 和 Ubuntu Docker 容器之间的标准输出缓冲不同?
    Docker 容器中的标准输出缓冲:Debian 与 Ubuntu 的案例在 Docker 容器中执行代码时,标准输出缓冲可能会发生在在某些情况下,但在其他情况下则不然。在使用 io.MultiWriter 将 stdout 定向到控制台和日志文件的情况下会出现此问题。根本原因:平台差异根本原因造成...
    编程 发布于2024-11-08
  • 语义HTML
    语义HTML
    语义 HTML 是 HTML 的一部分,可帮助您以维护和 SEO 友好的方式组织您的网站。 SEO 代表:搜索引擎优化。 当您在构建网站时遵循 HTML 语义时,该网站往往会更容易被搜索引擎排名更高,当然也能让屏幕阅读器更轻松地浏览您的网站。 以下是一些语义 HTML 标签: 1- “标题”标...
    编程 发布于2024-11-08
  • 如何在 Golang 中合并多个映射,同时避免重复值?
    如何在 Golang 中合并多个映射,同时避免重复值?
    在 Golang 中合并映射问题:合并多个映射,保留与跨映射中的相同键关联的值。 初始方法:提供的代码尝试通过迭代每个映射来合并映射,根据匹配键将值添加到结果映射。但是,此方法不处理结果映射中的重复值。简单合并:可以通过将值附加到切片来实现修改后的合并函数来处理重复项与结果映射中的键关联。func ...
    编程 发布于2024-11-08
  • 将 ZingGrid 连接到 Supabase:在几分钟内添加后端
    将 ZingGrid 连接到 Supabase:在几分钟内添加后端
    从我在 Zing 博客上的文章中交叉发布。 Supabase 是一个开源 Firebase 替代品。他们提供多种服务,但出于本文的目的,我们将深入探讨它如何充当网格的简单后端。 初始设置 在开始配置网格之前,我们需要在 Supabase 方面执行几个步骤。 1. 账户...
    编程 发布于2024-11-08
  • 如何在水平行中创建重叠的 Flex 项目?
    如何在水平行中创建重叠的 Flex 项目?
    创建重叠的 Flex 项目创建可能超出可用宽度的水平行 Flex 项目时,通常需要让它们重叠。默认情况下,Flexbox 会缩小项目以适合容器。Flexbox 方法要实现重叠,我们可以使用以下方法: overflow: visible;}.card {width: 10em; min-width: ...
    编程 发布于2024-11-08
  • 适合初学者的 Vue.js VueJs 部分表单和事件监听器
    适合初学者的 Vue.js VueJs 部分表单和事件监听器
    为什么使用 Vue.js 作为表单? Vue.js 在创建表单方面的优势: 简单的数据绑定:Vue.js 使用 v-model 在表单输入和组件数据之间绑定数据,使同步变得容易。 反应性:模型数据的任何更改都会自动更新视图,确保用户始终看到最新的数据,而无需编写大量...
    编程 发布于2024-11-08
  • Context API 与 Redux
    Context API 与 Redux
    在 React 生态系统中,Context API 和 Redux 都是流行的状态管理工具,但它们有不同的用途并具有不同的优势。 React 中内置的 Context API 提供了一种在组件树中共享状态的方法,而无需在每个级别手动传递 props。它对于更简单的应用程序或主题管理或用户身份验证等特...
    编程 发布于2024-11-08
  • 我们如何使用临时容器创建范围管道?
    我们如何使用临时容器创建范围管道?
    使用临时容器实现范围管道要创建处理临时容器内的值的范围管道,必须合并views::cache1运算符。该运算符会缓存转换的结果,确保其可用于后续操作。考虑以下场景,其中第三方函数 f 接受类型 T 的参数并返回 T 的向量。将 f 应用于无限范围 src 的所有元素并将结果展平为单个范围的范围管道,...
    编程 发布于2024-11-08

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3