JavaScript典型应用与最佳实践
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.4 JavaScript热潮再起

近两年,以Web 2.0为代表的特别重视用户体验的Web应用开始流行起来,特别是Ajax的出现,为创建拥有良好用户体验与高性能兼备的Web用户界面(User Interface,简称UI)提供了更多的可能,甚至,要创建出与桌面程序交互界面完全媲美的Web应用交互界面也变得方便容易起来。而在这其中,JavaScript发挥了重要的作用。JavaScript迎来了其发展的最重要的一个时期,主要原因有以下两个方面:

第一,B/S(Browser/Server)时代,极力提倡瘦客户端与零客户端概念,将应用功能全部集中在服务器端,由服务器端技术去实现;而在客户端只需要使用浏览器,不需要安装任何其他软件,并且客户端浏览器基本上也只是一个显示信息的区域和接收输入的表单,不处理任何业务逻辑。

这种架构显然有其优点:高度集中,易于维护,并且服务器端可以由多种技术实现,不需要安装客户端,界面可以做得如网页一样的漂亮;但是这种架构也有其显然的缺点:运算高度集中,资源要求高度集中,容易形成瓶颈,客户端控制能力差,用户交互体验不好。

为了解决Web时代面临的问题,首先需要将运算与资源在服务器端与客户端合理分摊,将部分业务逻辑处理交给客户端。这也有其现实的理由,那就是相比于几年前,现在的客户端的处理能力已经大大加强,并且资源利用率不高,所以将部分业务逻辑分摊给客户端在硬件上也是有保证的。其次,要加强用户界面交互性,特别是要借鉴桌面程序用户界面的优点,如后台异步请求、窗口部分刷新等特点,将这些特性引入到B/S的用户界面设计中。毕竟,电脑用户基本上都非常熟悉Windows桌面软件操作,如果我们的B/S的用户界面能做到与Windows桌面软件操作一致的话,用户将会很容易掌握我们的系统。

要达到以上的目的,就现在看来,只有JavaScript才是最合适的技术,因为JavaScript是唯一一个主流浏览器都支持的客户端脚本语言。这一点很重要,因为这样用JavaScript实现的功能不再需要安装其他第三方插件,并且JavaScript具有业务处理的运算能力,也有对用户界面的控制能力,如操作BOM与DOM(后面章节将有专门介绍)。这些都是JavaScript在Web时代将会取得巨大发展的现实基础。

第二,Ajax的出现,为创建与开发大型的JavaScript项目提供了可能。在Ajax出现与成熟以前,JavaScript在一些大型的软件项目中永远只能是配角,只能出现在表单验证、一些客户端UI组件的生成等非主流应用中,而业务逻辑与数据处理永远都是服务器技术的专利。

Ajax的出现改变了这种情况,它第一次将数据处理能力带给了JavaScript,我们可以通过Ajax访问远程数据库(当然,这中间还需要一层服务器端代理),然后将数据直接抓到JavaScript中进行处理,这就解决了以前建立大型JavaScript项目的最关键问题之一。另外,Ajax提供了后台异步请求资源的能力,因为不再需要通过刷新页面获取服务器数据,并且可以通过DOM技术来实现页面的局部刷新,这样就提供了Windows桌面程序的数据刷新能力。这一切都为利用JavaScript实现大型项目提供了契机。

而实际上,以Google为代表的国际大公司已经在用JavaScript来建立自己的核心产品了,如让人惊讶不已的Google Map等,如图1-3所示(部分截图)。

图1-3 Google公司的Google Map(部分截图)

在国内,使用Ajax,也就是利用JavaScript来建立自己的软件项目与产品的公司也越来越多,如图1-4所示的就是用JavaScript实现的图形流程设计工具。

图1-4 利用JavaScript实现的图形流程设计工具

该套工具完全仿照Windows中类似软件工具的界面形式与操作方式开发,从图形设计的操作习惯与属性编辑器的使用上都尽量与Windows中的类似软件靠齐。由于笔者主持了该套工具的开发,从笔者的感受来说,利用JavaScript实现类似软件的可行性还是非常之高,虽然在某些方面不如Windows平台上的开发工具方便,如组件与图形处理能力;但是JavaScript的这种开发能力还是非常让人值得期待,因为利用JavaScript开发这种基于Web上的软件有着其显然的优势:不需要安装,分发方便,易于与B/S架构软件集成等。笔者相信,今后会有越来越多的公司将其项目与软件产品利用JavaScript来实现,由此带动对JavaScript高级开发人员的巨大需求。

现在,不管是服务器端还是客户端技术都离不开JavaScript。随着服务器端技术热潮的渐渐远去,客户端技术的热潮即将到来,而在这个热潮中,JavaScript将成为当仁不让的主角!