系统菜单树生成速度优化

来源:互联网 发布:网络推广书籍 百度经验 编辑:程序博客网 时间:2024/05/18 01:06
这几天在做系统权限树,可以给角色分配系统菜单进行权限管理。第一步生成系统菜单树,几天后,顺利建好菜单树。但是......过程需要两分钟,由于菜单很多,刚开始也就忍了。。。后来想了想,获取菜单树的递归过程不需要重复获取数据库连接,于是把获取数据库的连接设为成员变量初始化,此过程把速度提升到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
原创粉丝点击