Symfony2菜单渲染算法
您对渲染菜单算法有何看法 我有两种变体: 1.从数据库中获取所有菜单项,并通过某种算法构造它们。 2.获取父项位于顶部(父项===null)的所有菜单项,并使用递归从父项获取子菜单Symfony2菜单渲染算法,symfony,Symfony,您对渲染菜单算法有何看法 我有两种变体: 1.从数据库中获取所有菜单项,并通过某种算法构造它们。 2.获取父项位于顶部(父项===null)的所有菜单项,并使用递归从父项获取子菜单 从性能上看,什么是最好的变体?最佳实践是设置一个根节点,该节点将作为孩子拥有菜单的第一级,然后使用递归性处理所有子元素,如果您处理的是动态菜单,并且您现在不知道它将来可能有多少子级,则此解决方案是完美的 对于性能问题,递归性仍然是一个很好的解决方案,在我们的例子“菜单问题”中,我不认为您会有性能问题,因为您处理的项目
从性能上看,什么是最好的变体?最佳实践是设置一个根节点,该节点将作为孩子拥有菜单的第一级,然后使用递归性处理所有子元素,如果您处理的是动态菜单,并且您现在不知道它将来可能有多少子级,则此解决方案是完美的
对于性能问题,递归性仍然是一个很好的解决方案,在我们的例子“菜单问题”中,我不认为您会有性能问题,因为您处理的项目数量相对较少,最多您可以有一个包含100个甚至500个项目的菜单,它不会导致性能问题,最佳做法是设置一个根节点,该节点将作为孩子拥有菜单的第一级,然后使用递归性处理所有子元素。如果您正在处理动态菜单,并且您现在不知道它将来可能拥有多少子级,则此解决方案是完美的
对于性能问题,递归性仍然是一个很好的解决方案,在我们的例子“菜单问题”中,我不认为您会有性能问题,因为您处理的项目数量相对较少,最多您可以有一个包含100个甚至500个项目的菜单,它不会导致性能问题,当我想从根目录中获取child时,您认为实体何时向DB发送请求没有问题吗?您可以急切地获取数据库,这样您将只发送一个DB请求,这样可以更好地防止对每个我不完全理解的父项的任何冗余DB请求<代码>$list=$this->getDoctrine()->getRepository('some:entity')->findBy(数组('parent'=>null))代码>和twig
{%macro menu(items)%}{%for items%}- {{link.title}
{{{u self.menu(link.children)}{%endfor%}
{%endmacro%}
你说的是这个吗?如果每次调用link.children时都使用fetch lazy,那么我说的是fetch策略。如果没有初始化条令集合,它将请求数据库获取子项,这可能会导致一些性能问题,您需要将获取策略设置为“急切”,然后您将拥有所有链接。子项已初始化,请尝试这样做。您认为当我要从根目录获取子项时,实体将向DB发送请求没有问题吗?您可以急切地获取数据库,以便只发送一个DB请求,这样可以更好地防止任何冗余我不完全理解每个家长的DB请求<代码>$list=$this->getDoctrine()->getRepository('some:entity')->findBy(数组('parent'=>null))代码>和twig{%macro menu(items)%}{%for items%}- {{link.title}
{{{u self.menu(link.children)}{%endfor%}
{%endmacro%}
你说的是这个吗?如果每次调用link.children时都使用fetch lazy,那么我说的是fetch策略。如果没有初始化条令集合,它将请求数据库获取子项,这可能会导致一些性能问题,您需要将fetch策略设置为eager,然后您的所有link.children都已初始化,请尝试使用此方法