我有一个标签文本字段,在输入新标签时会建议类似的现有标签。建议通过 ajax 请求检索到控制器,该控制器使用 Doctrine 从数据库中提取它们。IE:
- 要求
/tags/suggestions?q=foo
- 回复
["foo","food","fool"]
问题是请求太慢(至少 2 秒,在prod中),在这种情况下太多了。
有没有办法让请求更快? 根据分析器,主要时间消费者是kernel.request,占总时间的 50%。
我有一个标签文本字段,在输入新标签时会建议类似的现有标签。建议通过 ajax 请求检索到控制器,该控制器使用 Doctrine 从数据库中提取它们。IE:
/tags/suggestions?q=foo
["foo","food","fool"]
问题是请求太慢(至少 2 秒,在prod中),在这种情况下太多了。
有没有办法让请求更快? 根据分析器,主要时间消费者是kernel.request,占总时间的 50%。
如果 kernel.request 很慢,那不一定是 symfony 的问题。
您应该通过使用 php-fastPGM 而不是 php 标准模块更新 Apache 来优化您的服务器。
您还应该激活像 php APC 这样的缓存管理器,它可以减少更多的请求。
例如,我在树莓派上运行一个 symfony 项目。在进行这些调整之前,一个包含 8 个数据库请求的请求大约需要 25 秒才能显示。经过这些调整后,不到 3 秒(平均 2.5 秒)就显示了一个页面
另一个可能的调整列表:
http://slides.liip.ch/static/2012-05-18_symfony-speed.html#9
您可以使用以下命令要求教义(如果您还没有这样做)以数组的形式获取结果(无需将整个查询转换为一堆对象):
$q = $em->createQueryBuilder('t')->(...);
$q -> getQuery() -> fetchArrayResult();
应该加快速度一点。
对于像ajax 自动完成这样的小页面,我决定使用Silex,它是一个微型 Symfony2,它为我提供了一个优雅而快速的解决方案。