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