Symfony2将大参数变量加载到RAM而不是从磁盘加载

时间:2015-06-24 17:03:05

标签: symfony

在一个名为field_properties的文件中,我存储了应用程序中所有字段的信息,因此我知道,如果显示某个字段,则取决于某些特征(例如项目类型,项目大小)。虽然我在这里,但我也存储了数据标签,所以当我创建表单时也可以访问它。

此文件的结构类似于以下内容:

parameters:
    fieldProperty:
        entity1:
            field11:
                Label: 'Field11 label'            
                ProjectType:
                    IT: 0
                    Non-It: 1
                    Hybrid: 2
                ProjectSize:
                    Big: 1
                    Medium: 0
                    Small: 2
                Sensitivity: medium
            field12:
                Label: 'Field12 label'            
                ProjectType:
                    IT: 1
                    Non-It: 2
                    Hybrid: 0
                ProjectSize:
                    Big: 0
                    Medium: 1
                    Small: 2
                Sensitivity: medium
        entity2:
            field21:
                Label: 'Field21 label'            
                ProjectType:
                    IT: 0
                    Non-It: 1
                    Hybrid: 2
                ProjectSize:
                    Big: 1
                    Medium: 0
                    Small: 2
                Sensitivity: medium
            field22:
                Label: 'Field22 label'            
                ProjectType:
                    IT: 0
                    Non-It: 1
                    Hybrid: 2
                ProjectSize:
                    Big: 1
                    Medium: 0
                    Small: 2
                Sensitivity: medium

而且它很大(大约有2000个字段)。

我假设当我呼叫$fieldProperty = $this->container->getParameter('fieldProperty');时,控制器访问磁盘以加载信息。由于该信息实际上永远不会改变,所以如果它访问RAM会更好。如何在RAM中加载该东西,以便随时可以快速访问它?

谢谢!

1 个答案:

答案 0 :(得分:2)

  

我假设当我调用$ fieldProperty = $ this-> container-> getParameter('fieldProperty');控制器访问磁盘以加载信息。

实际上,是的,不,也许,有点:)

在最初的Symfony运行中会发生什么,它将构建一个缓存系统,主要是普通的PHP文件(app/cache目录中的文件)。在这里,存储了它需要加载的所有参数文件的(已解析的)值,因此实际参数yaml文件本身将不会从该点开始从磁盘读取和解析。

然而,这些缓存文件将在您对Symfony进行的每次调用时加载,但在性能方面,它更好地重建容器并在每次调用时重新加载所有配置选项。通常,像这样的文件不会在一段时间后从磁盘加载,而是由FileSystem缓冲区缓存(因此它几乎不是“真正的”磁盘搜索)和/或APC / OPCache。

当您调用getParameter()时,容器将从缓存中查找此参数,使其成为一个简单的数组查找(即使是2000项也足够快)。

我认为你对10件或10000件产品的性能影响可以忽略不计,但只有基准测试才能说实话。