相比于后台的技术,这几年前端的技术发展实在太快了.而RIA是未来几年内web的重头戏,
桌面软件web化是个趋势,office甚至ps这样重量级的软件都要web化,可以看到复杂软件web化技术上已经成为可能.相较于c/s结构,b/s结构的优势不言而喻,那么有什么理由不相信未来几年内,软件web化将成为大热门,从而引起整个网络的再一次繁荣?这个领域很新,把握住这个方向,就能成为这个领域的先行者.本曾想做个前后台兼通的程序员的,也想过完全抛弃技术,专心做设计的.这两方面的书没少买,也没少用过心.可是,事情的发展往往不完全由自己掌控.机缘巧合,现在已经专攻前端技术了.好在真正合格的前端少,竞争不算太激烈,而需求量又大,超受业内重视,头疼的是前端的技术真的是花样太多,而且更新太快.选择这一领域,真不知是幸还是不幸.
为什么RIA如此重要呢?其实道理很简单,对于一个普通的用户来说,对于网站的印象好坏完全取决于前台.一个用j2EE架框+甲骨文超强组合的后台系统和一个用asp+access做的后台系统,对于普通用户来说,完全感觉不到区别,或者说区别太小.他们能看到的只是前端的体验,比如说网站的UI,网站的交互体验,特效体验.前端好的网站,就很容易得到用户的认可.这也是为什么我选择前端的原因.
说到RIA,不得不说到三个东西:ajax,flash/flex,sliverlight.总的来说,应该将他们分成两类,一类是以js为核心,以ajax为重要武器的传统前端,即html/xhtml+js+css;另一类是嵌入html中,但是实际运行在自己的虚拟机中的富媒体,典型代表就是swf.从软件巨头微软开发sliverling可以看得出,前端富媒体很有价值.
以js/ajax为核心的RIA技术这几年发展很迅速,js库如雨后春笋般出现,Prototype,Dojo,jquery,YUI等等等等,甚至连dw也开始自己带js库了!对于js库,我只用过jquery,感觉实在是太棒了,第一个小,第二个功能实用,第三个使用方便,第四个容易上手.学过jq之后,基本上一般的js效果都不成问题,就算是有复杂的效果,也可以用上官方UI插件,或者第三方制作的丰富插件.可是,使用插件也不是个办法啊,东插一个西插一个的,可能存在冲突隐患,管理也不是很方便.那么,可以考虑一下Dojo或者是现在如日中天的ext.Dojo我也没有用过,但是ext我试过,这库实在是太华丽了,强大的功能,漂亮的UI,实在是一见倾心.只是ext的API文档实在是太烂了,目前的中文资料也非常少,自学实在是个很大的挑战.我想,js库这一块没必要全部掌握,我们只要挑自己喜欢的库,然后用精它就好.当然,选择流行的库是比较好的,因为有大量的插件和学习资料,另外,团队配合也更容易找到会用同样库的人.个人推荐学习两个库:jquery和ext.jquery小,而且灵活,是开发小型项目的首先;ext就比较大了,可是它的功能强大,做大型项目有非常大的优势.
富媒体的发展同样迅速.sliverlight我还没有用过,不好评价,不过,口碑似乎不错.说说flash/flex吧.从as2到as3的变化实在太大了!大到我一开始用as3的时候,完全动不了手,连最简单的单击按钮trace个"hello world"我都做不到了.看了些as3的资料,总算是勉强可以用了.as3提供了更多的类,更完善的语言体系,的确是解决了很多as2时代的大问题.但让我有疑问的是,as3干嘛搞得这么复杂?一个简单的功能要导一大堆的类进来,然后监听器还不能传参!功能强大了,可是易用性也打了非常大的折扣.虽说as2一个mc打遍天下有它的缺陷,可是非常好用,这对flash的普及一定有非常大的作用.到了as3,不得不赶走一批用户啊.也许你会说,flashplayer内置了两个引擎,提供对as2的兼容支持啊,不喜欢as3可以接着用as2嘛.话是没错,可是,知道自己用的技术已经落后了,在积极性方面不是会遭受打击吗?说完as,再来说说新贵flex.flex说新也不算新,出来也有几年了,可是真正受到大家关注,被国内同行所熟知,也应该是最近的事.相较于flash,flex最大的优势在于它丰富的组件.同样的功能用flash实现,复杂程度也许会翻上好几倍甚至好几十倍.但是flex也有自己的弱点,它的灵活性远不及flash.也就是说,如果做动画,或者是界面独特的交互,用flash是首选,如果要做功能组件,还是用flex的好.从flex的丰富功能来看,flex打从一开始就有个深思熟虑,十分完善的构思.传统html里面有的,这里几乎都找得到,css,脚本分离,流式布局和绝对定位布局,类似于ajax的异步传输.强大.
比较一下两方面的优势和预测一下未来可能出现的局面,我的观点是:以flash/flex为首的富媒体会赢.原因如下:
1)虽然ajax和js可以带来非常不错的交互效果,js库可以让复杂的功能简单地得以实现.可是,js库就是再强,其本质还是js,而js本身的能力还是很有限的,它最大的用处是用来控制DOM和CSS,从而取得不错的UE感受,可是对于DOM,CSS之外的东西,它就无能为力了.swf不同,它支持的东西很多,包括流媒体,套接字,访问本地信息,监听网络流.js本身的功能太简单了,w3c就像是这个产品的厂商,js库就像是第三方厂商生产的产品周边一样,各厂商有自己的想法.但是想法再多,也只能做周边,改不了产品.
2)js升级,扩展难.从css的普及升级可见一斑.js,css,html这类东西并非是某个厂家的专利产品,它是一个公用的东西,任何浏览器厂商都可以开发浏览器去支持它.如果html,js,css发布了新版本,并不是说,马上就能够得到各浏览器厂商的支持.也就是说,真正让js,css,html能够得到升级的,取决于技术和商家两部分.而商家又不是一家两家,一个公用的东西,你浏览器用你的引擎解释,我浏览器用我的引擎解释,可能大家对同一事物的解释是不一样的.这就涉及到一个兼容的问题,于是有了w3c组织.w3c组织又不是浏览器厂商他老子,他凭什么要求各浏览器要按它要求来更新对html,js,css版本升能的支持?于是,我们看到css2从98年出来,过了好多年才终于熬到了出头日,而事实上css3也一早出来了,只是到现在还没被广泛支持,js就更是升级缓慢了,甚至都没有多少人知道js版本问题,以及新旧版本的区别.事实上,之前我都不知道js升过级.这么一来,带来的是什么影响呢?就是技术得不到升级,就算新技术出现了,普及起来也是个时间活.相比之下,swf文件就完全不同了.它是商业公司的专利产品,不管浏览器是什么,它们都不直接由浏览器来解释,而是运行在自己的虚拟机上.这样一来,兼容就完全不是问题了,这一点和java倒是很相似.也正是因为兼容不是问题,所以技术更新不会因为普及的问题而遭遇瓶颈.as其实是比js发展得晚的语言,可是,到as2的时候,as就已经有赶超js的势头了,可是这个时候它们仍然十分相似.看看as3吧,哈哈,已经完全脱胎换骨了,已经和js完全不在一个档次了.想想看,js有可能会像as2到as3一样,进行重大改变,从而得到质的飞跃吗?哈哈,完全不可能的事吧.再过十年,js也还是很可能只是现在这个样子,而as已经经历数次变动,变成as5,as6,甚至as7,as8了.
技术的升级,能带来的功能增加是显而易见的.我有理由相信,未来的RIA中,哪怕是用html+js+css来制作的前端,也会靠调用as接口来实现功能.而用纯swf做前端的网站会越来越多,最终会赶超html+js+css的形式,成为前端表现的新主流.当然,html+js+css因为已经被广泛接受,另外还有Ext这样强大的js库可以抗衡一下,所以,这需要时间.只是,在华丽表面的背后,我们要看清本质,Ext就是表面再华丽,也只是js,它有着自己的瓶颈,无法超越的瓶颈.
未来几年内,前端一定将三分天下:其一,是以Ext为代表js库将传统页面的表现形式发挥到极至;其二,Adobe的flash/flex凭着成熟的技术和丰富的经验,以及不断创新的热情,引领着前端的技术走向;其三,微软的sliverlight凭借着公司强大的技术团队和.net体系协同做战的优势,奋起直追,很有可能追赶上flash/flex.