性能

编辑本页

警告:您正在浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 5.0,现已不再维护。

本页的更新版本用于Sy欧宝娱乐app下载地址mfony 6.2(当前稳定版本)。

性能

欧宝娱乐app下载地址Symfony的速度很快,完全脱离了常规。但是,如果按照下面的性能检查表优化服务器和应用程序,则可以加快速度。

欧宝娱乐app下载地址Symfony应用程序清单

以下是您可以在Symfony应用程序中进行的代码和配置更改,以提高其性能:欧宝娱乐app下载地址

  1. 如果您的服务器使用APC,请安装APCu Polyfill
  2. 将服务容器转储到单个文件中

如果您的服务器使用APC,请安装APCu Polyfill

如果您的生产服务器仍然使用遗留的APC PHP扩展而不是OPcache,请安装APCu填充组件在应用程序中启用与APCu PHP函数解锁对高级Symfony特性的支持,比如APCu缓存适配器。欧宝娱乐app下载地址

将服务容器转储到单个文件中

欧宝娱乐app下载地址类编译服务容器默认为多个小文件。将此参数设置为真正的将整个容器编译成一个文件,这可以在PHP 7.4或更新版本中使用“类预加载”时提高性能:

  • YAML
  • XML
  • PHP
1 2 3 4
#配置/ services.yaml参数:#……container.dumper.inline_factories:真正的

生产服务器检查表

在运行Symfony应用程序时,您可以在生产服务器中进行以下更改以提高性能:欧宝娱乐app下载地址

  1. 使用OPcache字节码缓存
  2. 使用OPcache类预加载
  3. 配置OPcache以获得最佳性能
  4. 不要检查PHP文件的时间戳
  5. 配置PHP realpath缓存
  6. 优化Composer自动加载器

使用OPcache字节码缓存

OPcache存储已编译的PHP文件,以避免为每个请求重新编译它们。有一些字节码缓存,但是从PHP 5.5开始,PHP附带了OPcache内置的。对于旧版本,最广泛使用的字节码缓存是APC

使用OPcache类预加载

从PHP 7.4开始,OPcache可以在启动时编译和加载类,并使它们对所有请求可用,直到服务器重新启动,从而显著提高性能。

在容器编译期间,Symfony生成带有要预加载的类列表的文件欧宝娱乐app下载地址。唯一的要求是您需要同时设置这两个container.dumper.inline_factories而且container.dumper.inline_class_loader参数真正的

预加载文件路径与已编译服务容器相同,但带有预加载后缀:

1 2
;php . iniopcache.preload= /道路/ /项目/ var /缓存/刺激/ srcApp_KernelProdContainer.preload.php

配置OPcache以获得最大性能

默认的OPcache配置不适合Symfony应用程序,因此建议按照以下方式更改这些设置:欧宝娱乐app下载地址

1 2 3 4 5 6
;php . ini;OPcache用于存储编译过的PHP文件的最大内存opcache.memory_consumption256;可以存储在缓存中的最大文件数opcache.max_accelerated_files20000

不要检查PHP文件的时间戳

在生产服务器中,PHP文件永远不应该更改,除非部署了新的应用程序版本。但是,默认情况下,OPcache检查缓存文件在缓存后是否更改了内容。这种检查引入了一些开销,可以通过以下方式避免:

1 2
;php . iniopcache.validate_timestamps0

在每次部署之后,必须清空并重新生成OPcache的缓存。否则将看不到应用程序中所做的更新。考虑到在PHP中,CLI和web进程不共享相同的OPcache,你不能通过在你的终端上执行一些命令来清除web服务器的OPcache。以下是一些可能的解决方案:

  1. 重启web服务器;
  2. 调用apc_clear_cache ()opcache_reset ()通过web服务器的功能(即通过在你在web上执行的脚本中使用这些功能);
  3. 使用cachetool实用程序来控制APC和OPcache从CLI。

配置PHPrealpath缓存

当一个相对路径被转换成它的真实和绝对路径时,PHP会缓存结果以提高性能。打开很多PHP文件的应用程序,比如Symfony项目,至少应该使用这些值:欧宝娱乐app下载地址

1 2 3 4 5 6
;php . ini;分配用于存储结果的最大内存realpath_cache_size4096K;将结果保存10分钟(600秒)realpath_cache_ttl600

请注意

PHP禁用realpath缓存。open_basedir开启Config选项。

优化Composer自动加载器

开发应用程序时使用的类装入器经过优化,以查找新的和已更改的类。在生产服务器中,PHP文件永远不应该更改,除非部署了新的应用程序版本。这就是为什么你可以优化Composer的自动加载器来一次扫描整个应用程序,并构建一个“类映射”,这是所有类的位置的一个大数组,它被存储在供应商/作曲家/ autoload_classmap.php

执行以下命令生成类映射(并使其成为部署过程的一部分):

1
Composer dump-autoload—no-dev—classmap-权威
  • ——no-dev排除了只在开发环境中需要的类(即。require-dev依赖项和autoload-dev规则);
  • ——classmap-authoritative为应用程序中使用的PSR-0和PSR-4兼容类创建类映射,并防止Composer扫描文件系统中没有在类映射中找到的类。(见:作曲家的自动加载器优化).
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。