我有一些 YAML 文件要从服务中解析。
但是在每次点击页面时,这些 YAML 文件都会被解析并转换为 PHP 数组。我了解 Symfony 会缓存默认的 YAML 文件,因此它不会在每个页面点击时解析每个 yaml 文件。
我想知道这里的最佳做法是什么。有没有办法让我的 YAML 文件只解析一次并与 Symfony2 的缓存一起存储?如果是这样,我能否指出正确的方向?
这完全取决于您希望如何进行缓存。
HTTP 缓存仅在 Web 上下文中以及当您解析并将这些文件添加到数组的操作的特定输出相对静态时才有意义。如果满足这两个条件,那么这是最好的方法。
您可以轻松地使用 APC进行缓存。它使缓存变量的内容变得非常简单。Doctrine 提供了围绕 APC 的缓存抽象,或者您可以使用原生 PHP 函数。
在 config.yml
services:
cache:
class: Doctrine\Common\Cache\ApcCache
然后在您的控制器或服务中:
if ($yamlArray = $this->get('cache')->fetch('foo')) {
$yamlArray = unserialize($yamlArray);
} else {
// do the work
$this->get('cache')->save('foo', serialize($yamlArray));
}
有关 cache_clearer 的详细信息(已添加但未充分记录)。