六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 92|回复: 0

表示层界面开发技术总结

[复制链接]

升级  94%

11

主题

11

主题

11

主题

童生

Rank: 1

积分
47
 楼主| 发表于 2013-1-24 06:51:29 | 显示全部楼层 |阅读模式
    市场上现有的表示层的一些界面开发技术如下图:
   
 
   
横轴表示偏向服务器端的技术。从左往右依次看:
1)         CGI是早期所用的通用网关接口,早已被抛弃,目前只在一些特定设备如网关上还存在。
2)         SERVLETJAVA编写的服务器端小程序,通过writer/print函数输出html页面。
3)         JSPSERVLET的扩展,引入了模板技术来生成网页,使网页编程变成以html为主体,在其中嵌入动态代码。其衍生的JSTL技术能提供自定义标签,可以达成页面组件化目标,不过缺点是自定义标签的开发难度很高,需要极高的编程技巧。
4)         JSF,在jsp的基础上进一步深入组件化,能以单机软件的模式来构建。并改变了通常的“请求-转发”的MVC模式,以“事件驱动”的思路来取而代之。缺点是性能差,jsf组件的设计越加复杂,需要专用IDE的支持。
5)         Portal,是jsf的一种应用,用来组合集成各类系统,方便实现门户级别的整合,缺点是非常昂贵(如websphereweblogic的解决方案等),性能差,部署复杂,二次开发有较高技术门槛。
6)         GWTgoogle的产品, 用类swing的方式来开发界面和软件,然后用js编译器将java代码翻译成js代码(翻译一次即可)。目标也是透明化浏览器和服务器的差异,而与jsf不同的是,GWT在运行期之前生成js,运行期通过ajax与服务器通讯。不过使用得不广泛,主要是因为调试困难,而且性能优化难度太高。
这个横轴越往右表明与服务器的关联越紧密,用更多的java,用更少的js,这是典型的java程序员的思维模式:什么都让java解决。
 
我们再来看另一个领域:浏览器。
纵轴表示的是偏向浏览器端的技术,从下往上依次看:
1)         HTML超文本标记语言。
2)         DOM是浏览器实现的文档模型 ,然后给它嵌入一个脚本语言解释器(javascript/vbscript)来操作。只是,dom模型和js语言都实现得太粗糙,很难用。(56年前那种复制黏贴的js特效代码满天飞的现象不是没有原因的)
3)         js函数库,如prototypejquerymootools 目标是弥补dom/js的低效和杂乱,努力减轻web程序员的工作,弥补js在“OOPDOM操作,组件化”等方面的先天不足。这些优秀类库是现代ajax的核心,催生出了一个web 2.0时代,界面开发开始重新向js回归(上一个努力是AppletFlash)。其中jQuery以强大灵活的选择器、链式调用和丰富易用的插件体系脱颖而出,成为大多数Ajax项目的首选。
4)         js特效库,如script.aculo.us(基于prototype),jquery plugin(基于jquery),dojo等,它们都提供了一些富客户端页面中常见的效果,如动画,拖放等。
5)         js组件库,如YUIYahoo UI),EXT(即YUI-EXT),Dojo等,它们提供了一些通用的组件库。jQuery plugin系列也有丰富的可选库。其中商业化最成功的就是EXT,已经自成一套体系,体积庞大,结构复杂,适合于内网的纯Ajax开发,二次开发难,界面风格调整不易。相比之下,jQuery作为js核心类库大大强于EXTcore,通用组件虽然不及EXT全面,但胜在易学易用,开源,易于二次开发,目前其plugin lib仍在不断增长,具备很高的采用价值(包括jquery UI)。
6)         嵌入式对象。FlashFLEXAPPLETsilverlightJavaFXgoogle gears是几大类页面嵌入实现,其中flash以庞大的装机率成为事实上的标准已经很多年了。
7)         HTML5,从浏览器出发,吸取Flash的精华,打造更强大的webHTML5将是今后的主角,flash杀手。浏览器凭借HTML5的普及,终将走向真正的富客户端。 
这个次序越往上,其与服务器关系越小,交给浏览器做的计算就越多。 
选用与服务器关系紧密的方式,服务器端生成页面的方式会对服务器造成性能压力,浪费服务器很多的计算能力,尤其是使用复杂的标签情况。选用偏向浏览器端的通用组件方式,其难度相当于需要掌握一门新的技术语言,难上手。技术越集成,则复杂度越高,越不容易使用。功能的强大与开发的简单是一对矛盾,往往需要在中间取一个平衡点。由服务器端生成,还是由客户端生成界面?我认为数据更适合由服务器处理,界面适合由浏览器生成。
    纵观近十年来的B/S技术流行趋势,风云变换,可以发现总的趋势是在向浏览器(富客户端)发展,越来越强调客户端体验(动态界面、异步刷新),实际上已经回到了传统C/S程序的老路上——客户端和服务端只传递数据,不再传递整个界面是未来的必然趋势。而数据的传递,则从单纯的get/post演变为ajax,继而演变成js端的rpc调用(dwr,buffalo等),模糊页面和服务器的界限(与GWT正好相反)。
 
    本篇是为公司写的前端界面技术方案的一段。本只想说明何种组件更适合公司,却不觉演变为一篇界面开发技术的分析。这其中最应该感谢的就是我偶像,给了我不少提携,其中的图就是在他的建议下建立,而服务器端的技术对我本是很模糊,也经由偶像指点得以流畅清晰。此段的文字更是在偶像的渲染之下变得生动有势。Thank you and I love you。
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表