优化全部程序使用的文件 ¶
默认时,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日