表示层界面开发技术总结

    市场上现有的表示层的一些界面开发技术如下图:

    表示层界面技术

 

   

横轴表示偏向服务器端的技术。从左往右依次看:

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。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值