性能

编辑该页面

警告:你浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 2.4,不再维护。

这个页面的更新版本Symf欧宝娱乐app下载地址ony 6.2(当前的稳定版本)。

性能

欧宝娱乐app下载地址Symfony是快速,对开箱即用的。当然,如果你真的需要速度,有许多方法,你可以使Symfony更快。欧宝娱乐app下载地址在本章中,您将探索许多最常见的和强大的方式让你的Symfony应用程序更快。欧宝娱乐app下载地址

使用字节代码缓存(例如APC)

最好的一个(简单的),你应该做的事来提高你的表现是使用“字节码缓存”。字节代码缓存的想法是把需要不断重新编译PHP源代码。有很多字节代码缓存可用,其中一些是开放源码的。缓存可能是最广泛使用的字节码APC

使用字节代码缓存真的没有缺点,和Symfony架构在这种类型的环境中执行得很好。欧宝娱乐app下载地址

进一步优化

字节代码缓存通常监测变化的源文件。这将确保如果源文件的变化,自动重新编译字节码。这真的是方便,但显然增加了开销。

出于这个原因,一些字节代码缓存提供一个选项来禁用这些检查。显然,当禁用这些检查,它将由服务器管理员,以确保缓存清除任何源文件变化。否则,你不会被更新。

例如,禁用这些检查在APC,简单的添加apc.stat = 0到你的php . ini配置。

使用作曲家的类映射功能

默认情况下,Symfony标准版欧宝娱乐app下载地址使用作曲家的自动装卸机autoload.php文件。这个自动装卸机很容易使用,因为它会自动找到任何新类,你放在注册目录。

不幸的是,这是有代价的,因为加载程序遍历所有名称空间找到一个特定的配置文件file_exists电话,直到最后找到了文件寻找。

最简单的解决方案是告诉作曲家来构建一个“类地图”(即一个大数组的所有类的位置)。这可以从命令行完成,可能会成为您的部署过程的一部分:

1
美元php作曲家。phar dump-autoload——优化

在内部,这个构建的类映射数组供应商/作曲家/ autoload_classmap.php

缓存与APC的自动装卸机

另一个解决方案是缓存后的每个类的位置位于第一次。欧宝娱乐app下载地址Symfony提供了一个类ApcClassLoader——这就是这个。使用它,就调整你的前端控制器文件。如果你使用标准的分布,这段代码在这个文件应该已经可以评论:

1 2 3 4 5 6 7 8 9 10 11 12 13 14
/ / app.php/ /……美元加载程序=require_once__DIR__“/ . . / app / bootstrap.php.cache”;/ /使用半自动的APC来提高性能/ /改变“sf2”你想要的前缀/ /为了防止关键与另一个应用程序冲突/ * $装载机=新ApcClassLoader (sf2,装载机美元);$装载机- >注册(真正的);* // /……

更多细节,请参阅缓存类装入器

请注意

当使用APC自动装卸机,如果您添加新类,他们将自动发现,一切将会与以前一样(即没有理由“清晰”缓存)。然而,如果你改变一个特定的名称空间和前缀的位置,你需要冲洗APC缓存。否则,自动装卸机仍将关注所有类的老位置在名称空间中。

使用引导文件

以确保最佳的灵活性和代码重用,Symfony应用程序利用各种类和第三方组件。欧宝娱乐app下载地址但从单独的文件加载所有这些类在每个请求会导致一些开销。减少开销,Symfony标准版提供了一个脚本生成一个所谓的欧宝娱乐app下载地址引导文件,包含多个类定义在一个文件中。通过包含这个文件(包含很多核心类)的副本,Symfony不再需要包含任何源文件包含这些类。欧宝娱乐app下载地址这将减少磁盘IO。

如果你使用Symfony标准版,那么你可欧宝娱乐app下载地址能已经使用引导文件。可以肯定的是,打开你的前端控制器(通常app.php),检查并确保以下行:

1
require_once__DIR__“/ . . / app / bootstrap.php.cache”;

注意,使用引导文件时存在两个缺点:

  • 文件需要重新生成原始来源的任何变化(即当你更新Symfony源或供应商库);欧宝娱乐app下载地址
  • 在调试时,需要一个破发点在引导文件。

如果你使用Symfony的标准版,引导文欧宝娱乐app下载地址件自动更新后重建通过供应商库php的作曲家。phar安装命令。

引导文件和字节代码缓存

甚至使用字节代码缓存时,性能会提高使用引导文件时,因为将会有更少的文件监控的变化。当然,如果禁用这个特性在字节码缓存中(如。apc.stat = 0APC),不再有理由使用引导文件。

这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。