性能

编辑本页

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

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

性能

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

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

为了提高性能,你应该做的最好(也是最简单)的事情之一就是使用“字节码缓存”。字节码缓存的思想是消除不断重新编译PHP源代码的需要。有很多字节码缓存可用,其中一些是开源的。最广泛使用的字节码缓存可能是APC

使用字节码缓存确实没有任何缺点,Symfony2的架构在这种类型的环境中表现得非常好。欧宝娱乐app下载地址

进一步优化

字节码缓存通常监视源文件的更改。这确保了如果文件源发生更改,字节代码将自动重新编译。这非常方便,但显然增加了开销。

出于这个原因,一些字节代码缓存提供了禁用这些检查的选项。显然,当禁用这些检查时,将由服务器管理员来确保当任何源文件更改时缓存被清除。否则,您所做的更新将不会被看到。

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

使用Composer的类映射功能

默认情况下,Symfony2标准欧宝娱乐app下载地址版使用Composer的自动加载器autoload.php文件。这个自动加载器很容易使用,因为它会自动找到你在注册目录中放置的任何新类。

不幸的是,这是有代价的,因为加载器遍历所有配置的名称空间以查找特定的文件,使得file_exists调用,直到最终找到它正在寻找的文件。

最简单的解决方案是告诉Composer构建一个“类映射”(即所有类的位置的大数组)。这可以从命令行完成,并且可能成为部署过程的一部分:

1
php的作曲家。Phar转储-自动加载-优化

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

用APC缓存自动装弹机

另一种解决方案是在第一次定位每个类之后缓存它的位置。欧宝娱乐app下载地址Symfony自带一个类-ApcClassLoader-就是这样的。要使用它,只需调整您的前端控制器文件。如果你使用的是标准分布,这段代码应该已经作为注释在这个文件中可用了:

12 3 4 5 6 7 8 9 10 11 12 13 14
/ / app.php/ /……加载程序require_once__DIR__“/ . . / app / bootstrap.php.cache”//使用APC进行自动装填以提高性能//按顺序更改'sf2'的前缀//避免与其他应用程序的密钥冲突/* $loader = new ApcClassLoader('sf2', $loader);加载程序- >注册(真正的);* // /……

详情请参见缓存一个类加载器

请注意

当使用APC自动加载器时,如果你添加了新的职业,它们将被自动找到,一切都将像以前一样工作(即没有理由“清除”缓存)。但是,如果您更改了特定名称空间或前缀的位置,则需要刷新APC缓存。否则,自动加载器仍将查看该名称空间内所有类的旧位置。

使用引导文件

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

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

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

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

  • 当任何原始源代码发生变化时(即当您更新Symfony2源代码或供应商库时),该文件需要重新生成;欧宝娱乐app下载地址
  • 在调试时,需要在引导文件中放置断点。

如果您使用的是Symfony2标欧宝娱乐app下载地址准版,引导文件将在通过php的作曲家。phar安装命令。

引导文件和字节码缓存

即使在使用字节码缓存时,使用引导文件也会提高性能,因为需要监视更改的文件更少。当然,如果这个特性在字节码缓存中被禁用(例如。apc.stat = 0在APC中),不再有理由使用引导文件。

此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。