Contributed by
Fabien Potencier
in #21038.
Symfony程序在初次运行之前会生成一些缓存文件以提升性能(例如把Twig模板和XML/YAML/Annotations的配置信息转换成PHP代码)。
这些缓存文件,在一个被称为 "cache warmup(缓存预热)" 的进程中被生成。Symfony包含了量 "cache warmers(加热器)" (用于 routing, templates, configuration, Doctrine,
等等),而通过创建一个实现了 Symfony\Component\HttpKernel\CacheWarmer\CacheWarmerInterface
接口的类,同时在将其定义为服务时打上 kernel.cache_warmer
标签,你的程序可以定义自定义的 "cache warmers"。
Symfony的 FrameworkBundle 提供了两个命令用于预热缓存:
1 2 3 4 5 6 7 8 9 10 11 | # warmup the existing cache but don't clear it
# 预热既存的缓存,但并不清除它
$ ./bin/console cache:warmup (--env=prod|dev)
# clear the existing cache and warm it up
# 清除当前缓存,再预热它
$ ./bin/console cache:clear (--env=prod|dev)
# clear the existing cache but don't warm it up
# 清除当前缓存也不预热它
$ ./bin/console cache:clear --no-warmup (--env=prod|dev) |
然而, cache:clear
命令的warmup预热部分,并不能工作得很好,也很难保证所生成的缓存能够与由 cache:warmup
生成的缓存完全相同。
由于Symfony 4的主要目标之一,就是要能生成全部缓存,以便在“只读”的系统上运行程序,因此我们不建议在Symfony 3.3中使用 cache:clear
命令的warmup部分,同时会在Symfony 4.0中移除此功能。
实践中,这意味着你应当在 cache:clear
命令中始终添加 --no-warmup
选项,然后再执行 cache:clear
命令:
1 2 3 4 5 6 | # before / 之前
$ ./bin/console cache:clear (--env=prod|dev)
# after / 之后
$ ./bin/console cache:clear --no-warmup (--env=prod|dev)
$ ./bin/console cache:warmup (--env=prod|dev) |