Composer 项目可通过生成纯类定义的预加载脚本并配置 opcache.preload 实现高效预加载;需用 composer-preload 工具扫描指定目录生成 preload.php,再在 php.ini 中启用 opcache 并指定路径,注意仅预加载稳定类、部署时重新生成脚本。

Composer 本身不直接支持 PHP 预加载,但可以通过合理组织自动加载逻辑、生成预加载脚本,并配合 PHP 7.4+ 的 opcache.preload 配置,实现 Composer 项目的高效预加载。
PHP 预加载在 Web 请求前一次性载入指定 PHP 文件到 OPCache 内存中,所有请求共享。但它不能动态执行 autoload 逻辑,也不支持 Composer 的自动加载器(如 vendor/autoload.php)直接被 preload —— 因为该文件会注册闭包、修改全局状态,而预加载阶段禁止副作用操作。
因此,关键不是“让 Composer 自动加载器被预加载”,而是提取出真正需要常驻内存的类文件路径,显式写入预加载脚本。
推荐使用社区工具 composer-preload(由 ocramius 维护)自动生成预加载清单:
立即学习“PHP免费学习笔记(深入)”;
composer require --dev ocramius/composer-preload
composer.json 中的 "preload": { "include": ["src/", "lib/"] } 指定需预加载的目录./vendor/bin/preload,它会扫描指定路径下所有 .php 文件,输出一个包含 require_once 的预加载脚本(如 var/preload.php)该脚本只包含纯类定义文件,不含任何运行时逻辑,符合预加载安全要求。
编辑 php.ini(注意:是 CLI 和 FPM 共用的配置,若用 FPM 需改 www.conf 对应的 php_admin_value[opcache.preload]):
opcache.enable=1opcache.preload=/path/to/var/preload.phpopcache.preload_user=www-data(确保 PHP 进程有权限读取该文件)可通过 opcache_get_status()['preload_statistics'] 验证是否加载成功及命中情况。
预加载不是“开箱即用”的银弹,需结合项目特点调整:
classmap 生成模式(composer dump-autoload -o)可提升自动加载性能,但对预加载无直接影响;预加载后,这些类已常驻内存,自动加载器几乎不再触发./vendor/bin/preload),否则代码变更不会生效require 任何依赖外部状态的文件(如配置、环境变量),否则会导致预加载失败以上就是Composer与PHP预加载(Preloading)如何结合使用以提升性能?的详细内容,更多请关注php中文网其它相关文章!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号