我尝试使用 symfony Web 应用程序进行充电测试。我有一个包含 13 个字段的实体,其中包括 1 个主键和 7 个外键。我已经注入了40K数据。
我的控制器使用 findAll() 和 KNP Paginator,每页最多 10 行。 页面显示需要很长时间(15 / 30 秒之间),这是我的分析器的结果:
性能指标:
我尝试过不使用关系外键,效果更好,但还不能接受。 绩效指标:
对于分页显示大量数据,您有什么建议?感谢您的帮助。
祝你有美好的一天。
<?php
namespace App\Controller\Admin;
use App\Repository\ChargeRepository;
use Knp\Component\Pager\PaginatorInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ChargeController extends AbstractController
{
#[Route('/admin/charge', name: 'app_admin_charge')]
public function index(ChargeRepository $repository, PaginatorInterface $paginator, Request $request): Response
{
$data = $paginator->paginate(
$repository->findAll(),
$request->query->getInt('page', 1),
10
);
// dd($myTickets);
return $this->render('admin/charge/index.html.twig', [
'data' => $data
]);
}
}
根据他们的文档,您应该对查询生成器本身进行分页,而不是对
findAll
的结果进行分页。当您使用 findAll
时,您会从数据库加载所有实体并对它们进行水合,这对于 40k 行来说需要大量时间。
这样的事情已经可以有所帮助:
$data = $paginator->paginate(
$repository->createQueryBuilder('charge'),
$request->query->getInt('page', 1),
10
);