系统菜单树生成速度优化

这几天在做系统权限树,可以给角色分配系统菜单进行权限管理。第一步生成系统菜单树,几天后,顺利建好菜单树。但是......过程需要两分钟,由于菜单很多,刚开始也就忍了。。。后来想了想,获取菜单树的递归过程不需要重复获取数据库连接,于是把获取数据库的连接设为成员变量初始化,此过程把速度提升到1分钟左右的速度。

1分钟的时间仍然很长,所有打算把菜单树获取之后放在session中,这样不必每次都去执行这个过程,只有第一次会耗时长一点。


做完这个之后,第二次之后时间在30s左右,但是为什么会有30s呢?应该执行的速度很快才对,因为是直接从session中取的嘛。debug发现,获取菜单的方法仍然被执行了一遍!!!仔细和第一次比较,发现第一次竟然执行了两遍!session中有了仍然执行获取!!大惑不解。



关于值栈!

ActionContext.getContext().put("sysMenuPrivTree", sysMenuPrivTree);

同时在js获取中,

var menuPrivTree =${sysMenuPrivTree};

于是想,很可能是这里重复了一次!

观察struts值栈发现,在栈顶的是roleAction,于是恍然大悟。



值栈中roleAction中在栈顶,会首先在roleAction中找sysMenuPrivTree属性,但是因为action中恰好有getSysMenuPrivTree方法,所以会执行这个方法,而不是直接从Context中找!!!!

问题找到了,接下来将
</pre><pre name="code" class="java">ActionContext.getContext().put("sysMenuPrivTree", sysMenuPrivTree);

改为

ActionContext.getContext().put("sysMenuTree", sysMenuPrivTree);

同时在js中,

var menuPrivTree =${sysMenuPrivTree};

改为

var menuPrivTree =${sysMenuTree};

这样在第二次执行时间是180ms左右!!满意了,第一次怎么优化再想吧~~~


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring JPA中生成菜单可以通过以下步骤进行实现: 1. 首先,需要在数据库中创建一个用于存储菜单信息的表,表结构至少需要包含id、菜单名、父菜单id等字段。可以使用`@Entity`注解来定义这个菜单实体类,并使用`@Table`注解来指定对应的数据库表。 2. 在实体类中,可以使用`@ManyToOne`注解定义菜单与父菜单的关联关系,表示该菜单对应的父菜单。这样就能够通过父菜单id查询到对应的父菜单信息。 3. 在菜单实体类中,可以添加一个名为`children`的字段,该字段用来存储该菜单的子菜单信息。使用`@OneToMany`注解定义菜单与子菜单的关联关系,并通过`mappedBy`属性指定关联关系的字段。 4. 创建一个自定义的Repository接口,继承`JpaRepository`接口,并自定义一个查询方法,用于根据父菜单id查询子菜单列表。在自定义方法上使用`@Query`注解,并编写JPQL查询语句,通过`@Query`注解中的`nativeQuery`属性指定是否使用原生的SQL查询。 5. 在Controller中,注入自定义的Repository接口,并通过调用自定义方法查询到根节点的菜单列表。 6. 通过递归的方式将查询到的根节点菜单信息组装成形结构,可以使用一个递归方法来实现这个过程。该方法接收一个菜单列表作为参数,先遍历菜单列表,找到根节点菜单,然后递归调用该方法,将该根节点菜单的子菜单列表作为参数传入。 7. 在前端展示时,可以通过遍历形结构,依次展示菜单的层级关系和子菜单。 通过以上步骤,就可以在Spring JPA中生成菜单了。注意,形结构的生成主要是通过数据库的表结构和实体类的关联关系来实现的,而查询和组装形结构的逻辑需要在后端进行处理,然后将生成菜单传给前端进行展示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值