【发布时间】:2014-04-14 13:00:11
【问题描述】:
我正在使用 Symfony 2.3.x 来实现一个项目。这涉及在 2 个配置文件中拥有 2 个巨大的键 -> 值对列表。
目前,这些是作为 YAML 文件实现的,它们看起来像这样:
parameters:
values:
part1:
key1: value1
key2: value2
key3: value3
key4: value4
key5: value5
key6: value6
part2:
key1: value1
key2: value2
key3: value3
key4: value4
key5: value5
key6: value6
和
map:
key1: ['value']
key2: ['value1', 'value2']
key3: ['value1', 'value2', 'value3']
key4: ['value']
key5: ['value1', 'value2', 'value3']
key6: ['value']
(第一个中的值被传递给一个类的构造函数,这就是它的值在parameters根节点下的原因)
在Symfony\Component\HttpKernel\DependencyInjection\Extension 实现中,它们的加载方式如下(相当标准):
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/folder'));
$loader->load('myfile.yml');
$loader->load('myfile2.yml');
一切正常,但这些文件很大(每个文件有几千行)并且会导致一些性能问题。我不坚持使用 YAML,所以我认为一个好的性能提升是完全跳过 YAML 解析部分并将这些值直接作为 PHP 数组。这可能会为我节省一些宝贵的时间。
问题是我不知道如何在 PHP 文件中转换它们。那些 PHP 数组应该是什么样子的? Symfony 如何读取该文件并获得对这些数组的访问权限?
我搜索了 Symfony 的文档,但基本上都是关于以 YAML 格式编写内容的。我只能找到这个:
parameters:
key: value
可以写成:
$container->setParameter('key', 'value');
但这里有一些问题:
- 没有关于
$container来自哪里的说明 - 当你有几千个参数时,调用
setParameter几千次似乎真的要慢得多 - 如果数组中有数组中的数组,那么如何调用该函数?
如何将我的 YAML 文件转换为 PHP 文件?
提前谢谢你:)。
【问题讨论】:
-
你考虑过缓存它们吗?那可能更容易。所以在开发中,你使用 yaml 文件,在生产/测试中你缓存它们。
-
您可以在单个 setParameter 调用中提供一个大的嵌套数组作为值。 $container 变量是预定义的。但我不认为你应该有这么多的数据作为参数。
-
@AndreschSerj 现在,该项目正在开发中,速度慢得令人无法接受。是的,这些文件在生产中被缓存,但我想确保在它进入生产阶段之前没有严重的性能问题......
标签: php performance symfony configuration-files