注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

北漂的小羊

Java编程,开发者,程序员,软件开发,编程,代码。新浪微博号:IT国子监

 
 
 

日志

 
 
关于我

在这里是面向程序员的高品质IT技术学习社区,是程序员学习成长的地方。让我们更好地用技术改变世界。请关注新浪微博号: IT国子监(http://weibo.com/itguozijian)

网易考拉推荐

网络中树型菜单实现方法及其效率研究 (转)  

2012-10-16 18:05:48|  分类: JAVA |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
网络中树型菜单实现方法及其效率研究

 网络中树型菜单实现方法及其效率研究 (转) - 天涯草 - 天涯草网络中树型菜单实现方法及其效率研究 (转) - 天涯草 - 天涯草
 

  
摘要:对于树型菜单大家已经见得很多了,无论是软件中树菜单的制作还是基于WEB的树型菜单的应用,这个看似很简单的菜单在具体实现和效率方面有很大的差别,对于节点数量小,节点层数小的树型菜单来说我们用各种方法实现的结果基本差不多,但是对于层树很多,节点数量很大,关系复杂的树壮菜单而言各种实现办法之间是相差很大的,本文基于几种常用的实现方法来研究其实现方法和效率的问题。

关键字:树型菜单 效率

前言:对于网页中的树状菜单其实现结构大概可以分为以下几种结构:根节点,分支节点,叶节点,树支,对于内层结构可以分为:静态代码实现方式,异步载入模式,而异步载入模式中又可以分为:总体树载入模式和单节点载入模式,对于异步载入模式主要是出于对数据库的操作。同时对于构造树的算法方面大致最常用的也就是:父子节点编号法,和前缀码编号法,而节点的传输方面又可以分为:服务器端动态生成HTML方式,服务器端静态生成HTML方式,客户端保存HTML方式,可以看到这里实现方法很多,也很复杂,所以本文仅仅研究了几种比较成功的例子,虽然部分代码和程序来源于网络,但我还是具体实现了一种利用APPLET方式生成动态树,并且是单节点刷新的方法,而且能重用,具体实现思想和设计模式将在本文最后的实例分析中可以看到。

正文:

1.理论分析:

1.1语言实现方法分析:各种实现方法之间由于所在的平台不同可能表现出的优越性不同,但是其本质,也就是编译方式和解释方式决定了其效率的高低,下面我们比较几种实现方式的具体差异,从最低层来看看他们本应该存在的差异。

1.1.1Javascript

运行原理:作为一种脚本语言,用于实现HTML网页中的动态操作,其运行原理和一般程序不一样,而是在程序运行的过程中被逐行解释的,同时它是以事件驱动的方式完成对事件的处理。

特点及其局限性:跨平台可以说是它最大的特点,给它带来优点的同时也带来了很多局限性,比如:游览器的局限性和安全性有关的局限性,但是因为它和HTML很好的结合模式,从而也导致了它是应用很广的一门脚本语言。

1.1.2Java-Applet

运行原理:属于嵌入到游览器环境中的程序,必须由游览器的虚拟机(JVM)负责执行。当在本地编译完成以后,生成字节码文件,这样我们就可以通过导入字节码文件的方式,来实现我们的操作。

特点及其局限性:和Javascript一样也有垮平台性,但是我们只需要对其编译完以后用户就可以很方便的实现其功能,同时因为是java的一种嵌入式开发模式,我们可以很方便的利用SWING组件和其中的类,这样会给我来很高的效率。

1.2数据加载模式分析:具体各以分为一次性加载数据模式和异步加载模式。

1.2.1异步加载模式:事实上就是实现单节点的刷新模式,当用户点击某个节点的同时获得这个节点的信息,这样我们就可以通信服务器,从其数据库或者XML文件中读取子节点信息,并且加载到页面,完成显示工作。

1.2.2异步加载的优点:对于用户的一次操作我们需要通过传输的数据量很少,同时支持我们只对数据库进行操作时,比如:当用户没有点击某个节点的时候,如果这个时候对数据库中的数据更新,这样用户的到的也面效果也是最新的。其无限扩展性也是很好的,我们只需要修改我们的数据库或者XML文件,添加和删除节点,即使是数量很大也没有关系,对于用户的显示也只是通信时间上的问题。

1.2.3异步加载的缺点:设计模式比数据一次性加载要复杂得多,要考虑到 B/S 之间的应答,要判断子节点是否含有孙节点,后台数据源的层级关系模型等。对网络传输的信赖性太大,每个节点的展开都需要连一次服务器,只要在取某节点数据时网络出现问题,就会导致该节点及其以下的子节点加载失败,同时对于服务器的通信次数太多(具体用户操作而言),这样会加重服务器的负担,所以这也是一个很大的缺点。

1.2.4一次性加载模式:相比上面这种数据加载模式而言,一次性加载模式是当用户获得网页后一次性从服务器把整个树的信息加载到游览器上面,虽然我们没有打开某些节点,但是我们事实上在本地已经获得了这些节点的信息,只是我们并没有展开父节点看到它而已。

1.2.5一次性加载的优点:相比异步模式,它的层次结构就更加清晰,实现方法也简单很多,。而采取数据一次加载的模式只要一次加载成功,服务器就可以不用管它了,服务器压力减轻,脚本设计则完全独立,对整棵树节点的检索可以在客户端完成,节点展开响应速度快等等优势,因此在节点数不多的情况下数据一次性加载更有优势。

1.2.6一次性加载的缺点:虽然对于服务器通信的次数很少,但是在第一次获得节点信息的时候数据量可能会很大,可能会由于网络环境的影响而严重影响用户的界面访问,对于节点总体节点信息量很大的情况不适合,同时对于服务器端的实时更新我们必须重新加载一次才能访问更新的内容。

1.3节点信息传输问题:在浏览器里显示的树结构其实都是一个个 HTML 元素组合起来的,在 WEB 页面里的树都是根据树节点的信息组合成一串的 HTML 元素列来显示,这一步从节点信息到 HTML 的转化可以在两个地方生成:一个是在服务器端,一个是在客户端。

1.3.1服务器端动态生成HTML方式:在服务器端生成的优点在于不须考虑客户端的浏览器的兼容性,节点信息的可控性非常强,但是它的缺点也是非常大的:加重服务器的负担,增加网络传输量。在服务器端直接生成树节点的 HTML 给服务器带来的压力是显而易见的,也是非常巨大的,估计只要有几十个并发连接就能让服务器暂时停止响应了。

1.3.2服务器端静态生成HTML方式:当然可以直接将树生成为一个静态文件放在服务器端,这种做法对于树节点相对固定不变的情况还是非常有利的,只需要生成一次,以后就不需要再生成了,服务器的压力也非常小,但它的弊病在于可变化性太小,比如说不同的权限能看到的树节点的不同这种情况,用这种生成静态树放在服务器端的做就没有办法解决。

1.3.3客户端保存HTML方式:这样虽然解决了传输量大的问题,但是当节点信息量很大时,我们在客户端本地保存的信息也是很大,可能会占用大量的本地的硬盘资源,并且每次的访问是独立的一次,当我们的信息量很大,而且用户的访问次数很多时,我们使得用户的负担加重。

  评论这张
 
阅读(295)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016