部署
优化
在将 CodeIgniter 应用部署到生产环境之前,可以通过多种方式提升应用程序的运行效率。
本节介绍 CodeIgniter 提供的优化功能。
spark optimize
Added in version 4.5.0.
spark optimize 命令会执行以下优化操作:
启用 配置缓存
警告
在 Worker 模式 下运行应用时,请勿使用 spark optimize。
Composer 优化
移除开发依赖包
部署时,务必运行以下命令:
composer install --no-dev
上述命令会移除仅用于开发、在生产环境中不需要的 Composer 包,从而显著减少 vendor 目录的体积。
指定需要发现的包
如果启用了 Composer 包自动发现机制,在需要时会扫描所有 Composer 包。但实际上并不需要扫描非 CodeIgniter 的包,因此通过指定需要扫描的包,可以避免不必要的扫描开销。
参见 指定 Composer 包。
配置缓存
重要
一旦缓存完成,在删除缓存之前,配置值将不会发生任何变化, 即使配置文件或 .env 已被修改。
缓存 Config 对象可以提升性能。但在更改 Config 值后,必须手动删除缓存。
参见 配置缓存。
FileLocator 缓存
缓存 FileLocator 查找到的文件路径可以提升性能。但在添加、删除或修改文件路径后,必须手动删除缓存。
参见 FileLocator 缓存。
PHP 预加载
通过 PHP 预加载,可以指示服务器在启动时将函数、类等关键文件加载到内存中。 这样,这些元素在所有请求中都能直接使用,跳过常规的加载过程,从而提升应用性能。 但代价是内存占用增加,并且任何更改都需要重启 PHP 引擎才能生效。
要求
使用预加载需要一个专用的 PHP 处理器。通常,Web 服务器配置为使用一个 PHP 处理器,因此一个应用需要一个专用的 Web 服务器。
如果希望在同一台 Web 服务器上为多个应用使用预加载,需要将服务器配置为使用虚拟主机,并为每个虚拟主机分配一个 PHP 处理器,
例如使用多个 PHP-FPM,每个虚拟主机对应一个 PHP 处理器。
预加载会通过读取 opcache.preload 中指定的文件,将相关定义保留在内存中。
备注
参见 使用一套 CodeIgniter 安装运行多个应用,了解如何使用一个核心 CodeIgniter4 来处理多个应用。
配置
如果 PHP 使用了拆分的 INI 配置,请打开 php.ini 或 xx-opcache.ini,
并建议设置 opcache.preload=/path/to/preload.php 以及 opcache.preload_user=myuser。
备注
myuser 是运行 Web 服务器的用户。
如果需要查找拆分 INI 配置的位置,可以运行 php --ini,
或打开 phpinfo(),并搜索 Additional .ini files parsed。
请确保使用 appstarter 安装方式。如果使用手动安装,则必须修改 include 路径中的目录。
<?php
// ...
class preload
{
/**
* @var array Paths to preload.
*/
private array $paths = [
[
'include' => __DIR__ . '/system', // <== change this line to where CI is installed
// ...
],
];
// ...
}
// ...