在一个名为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中加载该东西,以便随时可以快速访问它?
谢谢!
答案 0 :(得分:2)
我假设当我调用$ fieldProperty = $ this-> container-> getParameter('fieldProperty');控制器访问磁盘以加载信息。
实际上,是的,不,也许,有点:)
在最初的Symfony运行中会发生什么,它将构建一个缓存系统,主要是普通的PHP文件(app/cache
目录中的文件)。在这里,存储了它需要加载的所有参数文件的(已解析的)值,因此实际参数yaml文件本身将不会从该点开始从磁盘读取和解析。
然而,这些缓存文件将在您对Symfony进行的每次调用时加载,但在性能方面,它更好地重建容器并在每次调用时重新加载所有配置选项。通常,像这样的文件不会在一段时间后从磁盘加载,而是由FileSystem缓冲区缓存(因此它几乎不是“真正的”磁盘搜索)和/或APC / OPCache。
当您调用getParameter()
时,容器将从缓存中查找此参数,使其成为一个简单的数组查找(即使是2000项也足够快)。
我认为你对10件或10000件产品的性能影响可以忽略不计,但只有基准测试才能说实话。