性能
编辑该页面警告:你浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 3.2,不再维护。
读这个页面的更新版本Symf欧宝娱乐app下载地址ony 6.2(当前的稳定版本)。
性能
欧宝娱乐app下载地址Symfony是快速,对开箱即用的。当然,如果你真的需要速度,有许多方法,你可以使Symfony更快。欧宝娱乐app下载地址在本文中,您将探索一些方法让Symfony应用程序更快。欧宝娱乐app下载地址
使用字节代码缓存(例如OPcache)
你应该做的第一件事来改善你的表现是使用“字节码缓存”。这些缓存存储编译PHP文件,避免为每个请求重新编译它们。
有很多字节代码缓存可用,其中一些是开放源码的。PHP 5.5, PHP了OPcache内置的。对于旧版本,最广泛使用的字节代码缓存APC。
提示
如果您的服务器仍然使用遗留APC PHP扩展,安装APCu Polyfill组件在应用程序中启用兼容APCu PHP函数和开启支持先进Symfony特性,比如APCu缓存适配器。欧宝娱乐app下载地址
使用字节代码缓存真的没有缺点,和Symfony设计在这种类型的环境中执行得很好。欧宝娱乐app下载地址
监控源文件的变化
大多数字节代码缓存监视器变化的源文件。这将确保如果源文件的变化,自动重新编译字节码。这很方便,但它增加了开销。
出于这个原因,一些字节代码缓存提供一个选项来禁用这些检查。例如,禁用这些检查在APC,简单的添加apc.stat = 0
到你的php . ini
配置。
当禁用这些检查,它将由服务器管理员,以确保缓存清除任何源文件变化。否则,更新你的应用程序不会被看到。
出于同样的原因,字节码缓存部署应用程序时还必须清除(例如通过调用apc_clear_cache ()
当使用APC和PHP函数opcache_reset ()
当使用OPcache)。
请注意
在PHP CLI和网络流程不共享相同的OPcache。这意味着你不能清楚的web服务器OPcache通过执行一些命令在您的终端。你需要重新启动web服务器或调用apc_clear_cache ()
或opcache_reset ()
函数通过web服务器(即通过执行这些脚本,你在网络上)。
优化使用Symfony的所有文件欧宝娱乐app下载地址
默认情况下,PHP的OPcache节省高达2000字节代码缓存中的文件。这个数字太低为典型的Symfony应用程序,所以你应该设定一个更高的限制的欧宝娱乐app下载地址opcache.max_accelerated_files配置选项:
1 2
;php . iniopcache.max_accelerated_files=20000年
配置PHP realpath缓存
PHP使用内部缓存来存储文件路径映射到他们的真实的结果,绝对的文件系统路径。这增加了应用程序的性能像Symfony打开许多PHP文件,特别是在Windows系统。欧宝娱乐app下载地址
默认情况下,PHP设置一个realpath_cache_size
的16 k
这对于Symfony太低。欧宝娱乐app下载地址考虑更新这个值至少4096 k
。此外,缓存路径只是储存120年
秒默认情况下。考虑更新这个值使用realpath_cache_ttl
选择:
1 2 3
;php . inirealpath_cache_size=4096年Krealpath_cache_ttl=600年
使用作曲家的类映射功能
默认情况下,Symfony标准版欧宝娱乐app下载地址使用作曲家的自动装卸机autoload.php文件。这个自动装卸机很容易使用,因为它会自动找到任何新类,你放在注册目录。
不幸的是,这是有代价的,因为加载程序遍历所有名称空间找到一个特定的配置文件file_exists ()
电话,直到最后找到了文件寻找。
最简单的解决方案是告诉作曲家建立一个优化的“类图”,这是一个大数组的所有类的位置存储在供应商/作曲家/ autoload_classmap.php
。
类图可以从命令行生成,并且可能成为您的部署过程的一部分:
1
作曲家dump-autoload——优化——no-dev classmap-authoritative美元
-
——优化
- 转储每个PSR-0 PSR-4兼容的类中使用您的应用程序。
-
——no-dev
- 排除了类只需要在开发环境中(例如测试)。
-
——classmap-authoritative
- 防止作曲家扫描文件系统类的类没有找到地图。
缓存与APC的自动装卸机
另一个解决方案是缓存后的每个类的位置位于第一次。欧宝娱乐app下载地址Symfony提供了一个类ApcClassLoader——这就是这个。使用它,就调整你的前端控制器文件。如果你使用标准的分布,进行以下更改:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
/ / app.php/ /……使用欧宝娱乐app下载地址\组件\类加载器\ApcClassLoader;/ /不使用美元装载机作为变量名在这里/ /加载bootstrap.php时被覆盖。缓存文件美元类加载器=需要__DIR__。“/ . . / app / autoload.php”;include_once__DIR__。“/ . . / app / bootstrap.php.cache”;/ /使用半自动的APC来提高性能/ /改变“sf2”你想要的前缀/ /为了防止关键与另一个应用程序冲突美元加载程序=新ApcClassLoader (“sf2”,美元类加载器);美元加载程序- >注册(真正的);/ /……
更多细节,请参阅缓存类装入器。
请注意
当使用APC自动装卸机,如果您添加新类,他们将自动发现,一切将会与以前一样(即没有理由“清晰”缓存)。然而,如果你改变一个特定的名称空间和前缀的位置,你需要冲洗APC缓存。否则,自动装卸机仍将关注所有类的老位置在名称空间中。
使用引导文件
以确保最佳的灵活性和代码重用,Symfony应用程序利用各种类和第三方组件。欧宝娱乐app下载地址但从单独的文件加载所有这些类在每个请求会导致一些开销。减少开销,Symfony标准版提供了一个脚本生成一个所谓的欧宝娱乐app下载地址引导文件,包含多个类定义在一个文件中。通过包含这个文件(包含很多核心类)的副本,Symfony不再需要包含任何源文件包含这些类。欧宝娱乐app下载地址这将减少磁盘IO。
如果你使用Symfony标准版,那么你可欧宝娱乐app下载地址能已经使用引导文件。可以肯定的是,打开你的前端控制器(通常app.php
),检查并确保以下行:
1
include_once__DIR__。“/ . . / var / bootstrap.php.cache”;
注意,使用引导文件时存在两个缺点:
- 文件需要重新生成原始来源的任何变化(即当你更新Symfony源或供应商库);欧宝娱乐app下载地址
- 在调试时,需要一个破发点在引导文件。
如果你使用Symfony的标准版,引导文欧宝娱乐app下载地址件自动更新后重建通过供应商库作曲家安装
命令。
引导文件和字节代码缓存
甚至使用字节代码缓存时,性能会提高使用引导文件时,因为将会有更少的文件监控的变化。当然,如果禁用这个特性(如字节代码缓存。apc.stat = 0
APC),不再有理由使用引导文件。