本文的叙述过程分为两个部分,第一部分是现代 Web 发展趋势,第二部分是 Web 的前沿技术综述。现在先来阐述第一部分:现代 Web 发展趋势。
现代 Web 发展趋势
从网络在不同的发展阶段扮演的角色,现代 Web 发展阶段可以简单地分类为 Web1.0、Web2.0、Web3.0。Web1.0 中,网络是信息的提供者,单向性的提供和单一性理解;Web2.0 中,网络是平台,用户提供信息,通过网络,其他用户获取信息;Web3.0 中,网络成为用户需求理解和提供者,网路对用户了如指掌,知道用户有什么、要什么以及行为习惯,进行资源筛选、智能匹配,直接给出答案。
web1.0 的特征
Web1.0 类型的网站的口号是 “内容为王”,网站的目标是用内容来吸引眼球。这种思想也是传统媒体思想的一种延续。但是,在网络中,人与内容之间的关系常常受到超链接等外部因素的干扰,因而呈现出偶然性、随意性与跳跃性,而信息超载也使得内容对于人的持续吸引力不断减弱。也就是说,在网络中,人与内容的关系往往是不稳定的。有时,反倒是形式(例如界面风格)对人们在网络中的行为方式产生较强的制约作用。
Web2.0 的特征
Web2.0 则试图把人与内容的关系深化为人与人的关系。Web2.0 指的是一个利用 Web 的平台,由用户主导而生成的内容互联网产品模式,为了区别传统由网站雇员主导生成的内容而定义为第二代互联网。Web2.0 中,用户参与网站内容制造,网站的内容通常是用户发布的,使得用户既是网站内容的浏览者也是网站内容的制造者,这也意味着 Web2.0 网站为用户提供了更多参与的机会。Web2.0 是互联网的一次理念和思想体系的升级换代,由原来的自上而下的由少数资源控制者集中控制主导的互联网体系,转变为自下而上的由广大用户集体智慧和力量主导的互联网体系。
Web3.0 的特征
Web3.0 最大的特点在于信息的聚合以及提供个性化的信息服务,真正的 Web3.0 时代不仅仅是按照用户需求提供综合化服务,创建综合化服务平台,更关键的是,提供基于用户偏好的个性化聚合服务。例如,搜索引擎的个性智能化,用户不用分析和试验如何组合关键词语,只要把想要的东西列出,与个人的偏好和背景连接,搜索引擎就能把适合的数据提供出来,更快捷地搜索信息,解决问题,同时用户可以自由定制搜索聚合结果。Web 致富 Tim Bernerslee 提出 “Web3.0 is something called the semantic web (语义网)”,语义网是指将全部的信息、资源、知识分散各地,以内容的形式连接成网。Web2.0 的信息通过 Web 程序中的标识代码实现站内互通,而 Web3.0 将信息的互通进一步深度挖掘,直接从底层数据库进行互通。随着人工智能、大数据的发展,基于统计的机器学习技术,Web3.0 将会更加理解用户需求,提供更加智能的信息推荐。
前面从特征的角度,分别阐述了 Web1.0、Web2.0 和 Web3.0 的不同特点,简要的阐述了现代 Web 的发展趋势,下面的内容将讨论 Web 的前沿技术综述,讨论实现 Web 的技术的发展。
前沿技术综述
我从 2013 年就开始做 Web 技术方面的工作,而近几年主要是想转到 Web 推荐系统的方向。作为一名 Web 开发者,我曾在 PHP 和 Java 技术栈上开发 Web 应用和 Web 服务。最近,我将 Web 技术和开发趋势作为整体研究了一遍,在这里分享一下我的想法和观察结果。首先,让我分享一些我所观察到的可用性和体系结构目前的趋势。
前端发展的综述
前端里面近年来最流行的词语就是 HTML5、CSS3、ECMAScript6 技术,带来了前端技术的井喷式发展。
HTML5 中的 5 代表版本号,我们可以简单地理解为第五代 HTML 标准(实际在 HTML5 之前有非常多的次要版本更新),这一代标准提出了很多重大的功能更新,例如:Canvas、WebSockets、直接的多媒体支持、硬件加速支持、本地存储的支持等功能。HTML5 的发展越来越迈向成熟,许多的应用已经逐渐出现在你我日常生活中了,不止让传统网站上的互动 Flash 逐渐被 HTML5 的技术取代,更重要的是可以透过 HTML5 的技术来开发跨平台的手机软件。HTML5 的优势有:文档声明简化;新语义化标签;很好的替代 Flash 和 Silverlight;SEO 的友好性对于一些网站,特别是那些严重依赖于 Flash 的网站,HTML5 是一个大福音。HTML5 的发展机遇带来了网页游戏的发展和移动终端的普及。
CSS3.0 是 CSS 技术的升级版本,CSS3.0 语言开发是朝着模块化发展的。以前的规范作为一个模块实在是太庞大而且比较复杂,所以,把它分解为一些小的模块,更多新的模块也被加入进来。这些模块包括:盒子模型、列表模块、超链接方式、语言模块、背景和边框、文字特效、多栏布局等。
我最早是从 jQuery 开发开始的 JavaScript 的学习,到现在的 AngularJS、Vue.js 和 React.js 的流行,体会到 AngularJS 开发的好处,组件化开发的好处,AngularJS 和 Java 的思想非常的像,开发 Java 编程的人能够平稳过度到 AngualrJS 的程序。jQuery 流行起来的最根本原因是 DOM 选择器,DOM 选择器加上事件的操作。但随着页面的事件交互的复杂,jQuery 的代码将会变得不好维护,AngularJS 就是为了解决这样的问题诞生的,与 jQuery 事件驱动的思路不同,AngularJS 采用数据驱动,采用组件化开发,对于大型的前端页面,将会变得好维护起来。
另一方面,ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了。它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。ES6 中引入了 class 类的关键词,也就有了 import、export、extends 等关键词,与类 class 配合使用。撇开具体语言细节不谈,ES6 整体的代码风格非常容易上手,与 Java、Python、Ruby 等高版本的语言风格非常一致,给人的映像是学习的带入感很强,方便学习。
另外一点,前端的发展开始向后端发展,随着 Node.JS 的产生,Node.JS 可以写服务端的任务了。Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。Node.js 的包管理器 npm,是全球最大的开源库生态系统。基于 Electron 搭建 Web/Desktop 应用会更加常见,仅仅使用 JavaScript,HTML 以及 CSS,搭建跨平台桌面应用。
可用性的综述
如今,用户体验变得比以往更重要,响应式网页设计(Reponsive Web Design)也成为了网站必备的特性。RWD 响应式网页设计 能让最终用户在不同尺寸的设备上访问网站,包括手机和平板浏览器。有了响应式网页设计取代移动网站,我们便无需为移动用户单独开发额外的网站。特别是当我们需要把焦点放到如何呈现内容时尤为有用。但如果你是在开发 Web 应用(包含着大量 UI 交互流程)而不是网站时,响应式网页设计就帮不了你了。记住 Web 应用与网站是不同的。Twitter 的 Bootstrap 与 Zurb 的 Foundation 算是目前最流行的响应式网页设计框架。如果你要针对移动用户开发 APP,我会建议使用轻量级的框架比如 Yahoo 的 PureCSS。
应用程序架构的综述
企业中的移动优先策略同样影响到了 Web 开发架构。当一个组织在开发 Web 应用与 Web 服务时,他们会以自身的移动策略作为主方向调整。且如今,Web API 已成为 Web 应用和移动应用的中心,开发者会在服务器端建立 RESTful 服务,然后基于 RESTful 服务为 Web 和移动开发前端应用。Web 变得无处不在,不会因为桌面端的衰退而退缩,Web 以支持云服务的形式继续发展。
API 驱动开发的综述
在移动领域,API(特别是 RESTful API)已成为 Web 应用的关键部分,而服务器端的实现已变成薄薄的一层,只提供数据和安全相关的 API 。这些 RESTful API 并不受限于 Web 应用,移动应用同样可以使用。所以说现代 Web 开发人员编写的服务器端代码同时用于移动应用和 Web 应用,给予了我们更多的机会。这里的另外一个趋势是移动后端云服务的兴起,如 Parse 和 AzureMobileServices 等的服务(MBaaS)云平台解决方案。这些 MBaaS 平台可针对多种特定移动后端服务的数据模型提供自动的 RESTful API 。我们可以使用 MBaaS 服务开发 Web 应用,因为它们不仅提供 RESTful API ,伴随着移动 SDK 还提供了 JavaScript SDK 用于 HTML5 客户端。未来,我坚信 MBaaS 服务将广泛用于 Web 应用和移动应用。
Web 技术栈的综述
几年以前,动态类型语言如 Ruby、Python 和 PHP 已经吸引了许多创业公司。直到几年前,Ruby on Rails (以下简称 ROR)真是 Web 开发的一场革命。ROR 框架这样极其复杂的框架,它由无数顶级高手成年累月的心血堆砌而成,融合了 Web 开发领域内几乎全部的最佳实践。Ruby 语言的优势是可读性非常好,做 Web 应用系统的代码量小。但是由于 Ruby 语言自身的缺陷,ROR 的性能和内存占用不理想,规模效益不高。Ruby 作为动态语言在大团队开发上存在劣势,不能像 Java 有接口和静态类型检查。近年来 Ruby 语言呈现出衰退的趋势,Ruby 几乎只能做 Web 开发,其最佳的适用场景正在慢慢被其他的语言取代。
Python 做 Web 方向从来也没有热门过,但是 Python 做 Web 也没有衰退,因为用 Python 的人很多,自然有人就会用自己熟悉的语言 Pyhton 去做 Web 方面了。Python 流行起来的根本原因是 Python 在科学计算、计算机视觉、图像处理、运维脚本等领域是非常强大的胶水语言,相关的模块支持非常地多。Python 语言做模型非常的快。
总是有人在黑 PHP,但是 PHP 在 Web 开发领域的地位是无人撼动的。PHP 语言本身是不错的,对于 web 应用一直都是最佳的选择,而且近年来 Composer, PSR, PHP7 带来了颠覆性的变化。PHP 兼具无需编译和热部署这两点,就让人无法拒绝了。再加上 PHP 弱类型,内置模板引擎和丰富的库函数以及强大的哈希表,决定了 PHP 的学习 / 开发 / 运维成本远远低于 Java 等其他 Web 开发语言。首先 PHP 确实是开发速度极快,为什么?因为弱类型 (PHP7 有类型声明选择开关,只要引入开关指令 declare (strict_type=1) 就会强制当前的文件下的程序遵循严格的参数类型,返回值类型),不需要定义返回的类型,加上 PHP 实际开发过程中喜欢运用它万能的数组来做计算,返回。所以他的动态扩展性非常强,如果返回值结构改变,没关系,直接改数组结构就行 (注意,PHP 数组太强大,可以当作 Map,List 来用,底层的实现其实是 HashMap)。
Java 老牌语言,大数据和 Hadoop 的首选。JAVA 的优点在于成熟,任何技术,任何需求,包括与各种硬件打交道的接口。都有相对应的方案,或者开源项目,拿来可以用,比如 POI 操作。Hadoop,Spark 和 Storm 是目前最重要的三大分布式计算系统,Hadoop 常用于离线的复杂的大数据处理,Spark 常用于离线的快速的大数据处理,而 Storm 常用于在线的实时的大数据处理。不过 Hadoop 有成熟的生态圈,而 Spark 的话虽说处理速度快,但还相对不太稳定。而 Java 可能要开发过程可能要慢一点,Java 面向对象的技巧,设计模式会运用的更多一点。需要定义各类 Model 来适应你业务的需求。编写风格会有一定的统一要求。强类型在编写的时候会比 PHP 麻烦,但好处是更安全,因为类型固定,潜在风险较低,还有编译器给你做了一次保障。
许多创业公司已经利用 RoR 和 Python 的 Web 框架开发出各种创新的产品。但如今有趣的是,由于性能和可扩展性的难题,这些应用程序正被其它的 Web 技术栈重建。在大型应用程序中使用动态类型语言就像在喝加了太多糖的饮料。开始的时候,糖的甜味会比较吸引人,但长期来看就会伤害到应用程序的健康。今年,我们已经看到很多企业采用 Node.js 尤其是用于构建备受关注的移动应用后端服务。大企业如领英(LinkedIn)和沃尔玛(Walmart)正在使用 Node.js 加强它们的移动后端服务。作为一项新技术,Node.js 真是 2014 年采纳市场的赢家。Node.js 也是移动后端服务(MBaaS)云解决方案的首选技术栈。今年我们也看到许多基于 Node.js 的命令行工具被用于前端开发。Node.js 的崛起与 Ruby 栈的衰落是今年最值得注意的趋势
Dcoker 容器技术的发展
在 2013 年 3 月,Docker 项目正式开源。短短的三年中,Docker 已经迅速普及开来,云计算、大数据、互联网等相关 IT 技术公司纷纷开始拥抱 Docker。在硅谷,有 200 多家 Docker 相关的创业公司。Google、Microsoft、AWS、IBM 等大型技术公司都已经加入 Docker 生态圈,开始使用 Docker,并为 Docker 社区共享。OpenStack、Hadoop 等云计算、大数据框架也开始向 Docker 迁移。
在国内,从 Docker 诞生之日起,各大技术公司和极客们就开始紧密关注这项技术。从 2014 年下半年开始,陆续有公司开始把现有系统迁移到 Docker 平台。BAT、华为、新浪、京东都有 Docker 相关产品上线。Docker 的普及愈演愈烈,大有掀起第二次云计算革命之势。
通过在实际项目中使用 Docker,发现 Docker 天生就是要解决敏捷开发、持续集成、持续发布、动态迁移、动态伸缩等互联网、云计算、大数据行业普遍存在的问题。通过把产品容器化,加速了开发、测试、发布的流程,产品发布时间从半天减少到 47 秒。通过镜像提交产品,解决了开发、测试、发布的环境异构性问题,使产品可以平滑地在各个部门之间传递。
Go:2017 及未来的技术
最近出现了许多用 Go 开发的优秀应用,包括 Docker 和 Packer.IO。我预测 Go 将会在各种不同的社区中产生巨大的吸引力,包括 Java、Ruby、Python 和 Node.js。Go 是静态类型语言却提供了动态类型语言生产力的灵活性。在 Go 语言中,并发性是核心编程语言的一等公民。类似 C 和 C++,Go 编译成原生机器码;而不像 Java 和.Net,它不需要任何 JIT 编译。我爱上了 Go 的简单性、实用的设计和相当好用的包系统。也许它不适合构建传统的 Web 应用,但绝对适合做提供 RESTful 服务的 HTTP 服务器。在未来,你也许还可以用 Go 开发 Android 应用。Go 的优势是它是一种通用编程语言,可以用于任何可能的场景 — 包括系统编程和大型分布式商业应用。我强烈感受到 Go 是属于云时代的分布式、并发、并行计算的语言。Go 可以在企业中成为下一个 Java。
参考文献
[3] https://foundation.zurb.com/
[4] 向阳. Web1.0 与 Web2.0 比较研究 [J]. 计算机光盘软件与应用,2011 (3):8-8.
[5] 周珍妮,陈碧荣. Web3.0—— 全新的互联网时代 [J]. 科技广场,2008 (7):235-237.
[6] 徐璐,曹三省,毕雯婧,等. Web2.0 技术应用及 Web3.0 发展趋势 [J]. 中国传媒科技,2008 (5):50-52.
[7] 刘林霞,杨馨。计算机网络服务器硬件和操作系统的发展趋势分析 [J]. 信息与电脑:理论版,2010 (6):86-86.