表现

表现

欧宝娱乐app下载地址Symfony速度很快,开箱即用。但是,如果按照以下性能检查表中所述优化服务器和应用程序,您可以使它更快。

性能检查表

使用这些检查列表来验证您的应用程序和服务器配置为最大性能:

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

如果您的生产服务器仍然使用旧版APC PHP扩展而不是OPCache,请安装APCu Polyfill组件在您的应用程序中,以实现兼容性APCU PHP功能以及解锁对高级Symfony特性的支持,如APCu Cache适欧宝娱乐app下载地址配器。

限制应用程序中启用的区域设置数量

使用framework.translator.enabled_locales仅选项仅生成实际应用中使用的翻译文件。

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

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

  • yaml.
    1 2 3 4
    #配置/ services.yaml参数:#……container.dumper.inline_factories.:真正的
  • XML
    1 2 3 4 5 6 7 8 9 10 11
    <! -  config / services.xml  - >< ?encoding="UTF-8"<容器xmlns =“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi =“http://www.w3.org/2001/xmlschema-instance”xsi: schemaLocation =“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd”><参数><! -  ...  - ><参数关键=“container.dumper.inline_factories”>真正的> < /参数> < /参数> < /容器
  • PHP
    1 2 3 4
    / /配置/ services.php/ /……美元的容器->setParameter('container.dumper.inline_factories',真正的);

使用OPCACHE字节代码缓存

OPcache存储编译后的PHP文件,以避免每次请求都必须重新编译它们。有一些字节代码缓存可用,但截至PHP 5.5,PHP附带opcache.内置。对于旧版本,最广泛使用的字节代码缓存是APC

使用OPcache类预加载

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

在集装箱编译期间(例如运行时缓存:清晰命令)时,Symfo欧宝娱乐app下载地址ny会生成一个文件,其中包含要在var / cache /目录中。不是直接使用这个文件,而是使用config / preload.php.创建的文件在你的项目中欧宝娱乐app下载地址使用Symfony Flex:

1 2
;php . iniopcache.preload=/path/to/project/config/preload.php.php.

如果缺少此文件,请运行此命令以重新安装Symfony Flex Recipe:欧宝娱乐app下载地址作曲家食谱:安装欧宝娱乐app下载地址symfony / framework-bundle- 力量- v

使用container.preloadcontainer.no_preload.服务标签要定义哪些类应该或不应该由PHP预加载。

配置OPcache,实现性能最大化

默认OPCache配置不适合Symfony应用程序,因此建议更改这些设置,如下所示:欧宝娱乐app下载地址

1 2 3 4 5 6
;php . ini;OPCache可以用于存储已编译的PHP文件的最大内存opcache.memory_consumption=256.;可以存储在缓存中的最大文件数opcache.max_accelerated_files=20000

不要检查PHP文件的时间戳

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

1 2
;php . iniopcache.validate_timestamps=0

每次部署后,必须清空并重新生成OPCache的缓存。否则,您将不会看到应用程序中的更新。鉴于在PHP中,CLI和Web进程不共享相同的opcache,无法通过在终端中执行一些命令来清除Web服务器OPCache。这些是一些可能的解决方案:

  1. 重启web服务器;
  2. 打电话给apc_clear_cache()opcache_reset ()通过web服务器的函数(即通过在脚本中执行这些web);
  3. 使用Cachetool.实用程序从CLI控制APC和OPcache。

配置PHPearcath.缓存

当相对路径转换为其实际和绝对路径时,PHP高速缓存结果以提高性能。打开许多PHP文件(如Symfony项目)的应用程序至少应至少使用这些值:欧宝娱乐app下载地址

1 2 3 4 5 6
;php . ini;为存储结果而分配的最大内存realpath_cache_size=4096K.;保存结果10分钟(600秒)realpath_cache_ttl=600

请注意

PHP禁用earcath.缓存时的缓存Open_Basedir.已启用配置选项。

优化作曲家自动装卸机

在开发应用程序时使用的类加载器优化,以查找新的和更改的类。在生产服务器中,PHP文件永远不应该更改,除非部署了新的应用程序版本。这就是为什么你可以优化Composer的Autoloader扫描整个应用程序一次并构建优化的“类地图”,这是所有类的大量位置,它存储在供应商/ composer / autoload_classmap.php

执行这个命令来生成新的类映射(并使它成为你部署过程的一部分):

1
美元Composer Dump-Autoload --no-dev --classmap-权威
  • - 没有开发排除在开发环境中仅需要的类(即需要dev.依赖项和自动加载开发规则);
  • ——classmap-authoritative为应用程序中使用的PSR-0和PSR-4兼容类创建类映射,并防止Composer扫描文件系统以查找类映射中没有的类。(见:作曲家的自动装卸机优化)。

分析Symfony应欧宝娱乐app下载地址用程序

分析与黑焰

黑焰是在开发、测试和生产过程中分析和优化Symfony应用程序性能的最佳工具。欧宝娱乐app下载地址它是一个商业服务,但提供了免费的功能,您可以使用这些功能来发现项目中的瓶颈。

分析Symfony StopW欧宝娱乐app下载地址atch

欧宝娱乐app下载地址Symfony在开发过程中提供了一个基本的性能分析器配置环境。单击“时间面板”的Web调试工具栏要查看在使数据库查询和呈现模板上花费的时间欧宝娱乐app下载地址对任务所花费的时间。

您可以衡量您自己代码的执行时间和内存消耗,并通过以下方式显示Symfony Profiler的结果欧宝娱乐app下载地址秒表组件

当使用自动装配,键入任何控制器或服务参数欧宝娱乐app下载地址symfony \ component \ stopwatch \ stopwatch类,Symfony将欧宝娱乐app下载地址注入debug.stopwatch服务:

使用欧宝娱乐app下载地址symfony \ component \ stopwatch \ stopwatch;dataexporter.{私人$秒表;公共函数__construct(秒表$秒表){$这一点->秒表=$秒表;}公共函数出口(){//参数是"剖析事件"的名称$这一点->秒表->开始(“导出数据”);// ...做导出数据的事情......//重置秒表,删除到目前为止测量的所有数据/ / $ this - >秒表- >重置();$这一点->秒表->停止(“导出数据”);}}

如果请求在执行期间调用此服务,您将看到一个名为的新事件导出数据Symfony欧宝娱乐app下载地址分析器。

开始(),停止()getevent()方法返回一个欧宝娱乐app下载地址Symfony \ \秒表\ StopwatchEvent组件提供有关当前事件信息的对象,即使它仍在运行也是如此。该对象可以转换为快速摘要的字符串:

/ /……转储((细绳)$这一点->秒表->getEvent());/ /转储。“4.50 MiB - 26ms”

属性还可以分析模板代码秒表树枝标签:

1 2 3 4 5
{%秒表“render-blog-posts”%}{%帖子blog_posts%}{#……#}{%endfor%}{%endstopwatch%}

分析类别

的第二个可选参数开始()方法来定义事件的类别或标签。这有助于按类型组织组织的事件:

$这一点->秒表->开始(“导出数据”,“出口”);

分析时间

一个真实世界的秒表不仅包括启动/停止按钮,还包括一个“圈圈按钮”来测量每个部分圈圈。这就是大腿上()方法会停止一个事件,然后立即重新启动它:

$这一点->秒表->开始('流程数据记录',“出口”);foreach(美元的记录作为美元的记录){/ /……这里有一些代码$这一点->秒表->腿上('流程数据记录');}美元的事件=$这一点->秒表->停止('流程数据记录');// $event->getDuration(), $event->getMemory()等// Lap信息存储为事件中的“周期”:/ /事件- > getPeriods ();

分析部分

部分是将轮廓时间线分成组的方法。例子:

$这一点->秒表->openSection();$这一点->秒表->开始(“validating-file”,“验证”);$这一点->秒表->stopSection(“解析”);美元的事件=$这一点->秒表->getSectionEvents(“解析”);//稍后您可以重新打开将其名称传递给OpenSection()方法的部分$这一点->秒表->openSection(“解析”);$这一点->秒表->开始(处理文件的);$这一点->秒表->stopSection(“解析”);

这项工作,包括代码样本,是在一个创作共用BY-SA 3.0许可证。