Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony2菜单渲染算法_Symfony - Fatal编程技术网

Symfony2菜单渲染算法

Symfony2菜单渲染算法,symfony,Symfony,您对渲染菜单算法有何看法 我有两种变体: 1.从数据库中获取所有菜单项,并通过某种算法构造它们。 2.获取父项位于顶部(父项===null)的所有菜单项,并使用递归从父项获取子菜单 从性能上看,什么是最好的变体?最佳实践是设置一个根节点,该节点将作为孩子拥有菜单的第一级,然后使用递归性处理所有子元素,如果您处理的是动态菜单,并且您现在不知道它将来可能有多少子级,则此解决方案是完美的 对于性能问题,递归性仍然是一个很好的解决方案,在我们的例子“菜单问题”中,我不认为您会有性能问题,因为您处理的项目

您对渲染菜单算法有何看法

我有两种变体: 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都已初始化,请尝试使用此方法