优化全部程序使用的文件 

默认时,PHP的OPcache在byte code缓存中存了2000个文件。这个数字对于一般的程序来说还是太小,因此你必须设置 opcache.max_accelerated_files 配置选项为更高的值:

1
2
; php.ini
opcache.max_accelerated_files = 20000

配置PHP realpath缓存 

PHP使用了一个内部缓存来存储“类文件路径”映射到“文件系统真实路径”的结果。这提高了Symfony这种“开启许多PHP文件”的程序之性能,特别是在Windows平台上。

默认时PHP设置了一个 16K 的 realpath_cache_size,这对Symfony来说实在太小。将这个值更新到至少 4096K。此外,缓存路径默认时只保存 120 秒,同样考虑通过 realpath_cache_ttl 选项来更新此值:

1
2
3
; php.ini
realpath_cache_size=4096K
realpath_cache_ttl=600

使用Composer的类映射功能 

默认时,Symfony标准版使用的是 autoload.php 文件中的Composer自动加载器(autoloader)。这个加载器很容易使用,因为它自动寻找任何“你在已注册目录中放置了”的新类。

不幸的是,这有使用成本,因为类加载器要遍历全部已配置的命名空间,以便找到一个特定文件,发起 file_exists() 的调用直到最终找到它想要的文件为止。

最简单的方案是告诉Composer构建一个优化过的"class map"(类映射),这是一个所有类所在位置的大数组,并且存放在 vendor/composer/autoload_classmap.php 中。

这个类映射可以由命令行生成,可能会成为你部署过程的一部分。

$  composer dump-autoload --optimize --no-dev --classmap-authoritative
--optimize
剥离你程序中的每一个兼容PSR-0 和 PSR-4 的类。
--no-dev
排除那些你只在开发环境下使用的类(如tests)。
--classmap-authoritative
防止Composer在文件系统中寻找那些没有出现在类映射中的类。

或使用 composer dump-autoload --apcu

进一步参考 http://composer.p2hp.com/doc/articles/autoloader-optimization.md 

最后更新于 2020年8月4日

基于composer的php项目的性能优化
标签: