来说说前端以后的发展方向以及趋势~~
web前端的发展史
静态网页的诞生
1989年,在欧洲粒子物理实验室(粒子物理研究通常与来自世界各地的研究所进行合作)的IT部门工作的Tim Berners-Lee向其领导提出了一项名为Information Management: A Proposal的提议:使来自世界各地的远程站点的研究人员能够组织和汇集信息,在个人计算机上访问大量的科研文献,并建议在文档中链接其他文档,这就是Web的原型。
Tim Berners-Lee
1990年,Tim以超文本语言HTML为基础在NeXT电脑上发明了最原始的Web浏览器。
1991年,Tim作为布道者在Internet上广泛推广Web的理念,与此同时,美国国家超算应用中心(National Center for Supercomputer Applications)对此表现出了浓厚的兴趣,并开发了名为Mosaic的浏览器,于1993年4月进行了发布。
1994年5月,第一届万维网大会在日内瓦召开。
从左至右依次为:Joseph Hardin,Robert Cailliau, Tim Berners-Lee, Dan Connolly
1994年7月,HTML2规范发布。
1994年9月,因特网工程任务组(Internet Engineering Task Force)设立了HTML工作组。
1994年11月,Mosaic浏览器的开发人员创建了网景公司(Netscape Communications Corp.),并发布了Mosaic Netscape 1.0 beta浏览器,后改名为Navigator。
1994年底,由Tim牵头的万维网联盟(World Wide Web Consortium)成立,这标志着万维网的正式诞生。
万维网部分成员
此时的网页以HTML为主,是纯静态的网页,网页是“只读”的,信息流只能通过服务器到客户端单向流通,由此世界进入了Web 1.0时代。
JavaScript的诞生
1995年,网景工程师Brendan Eich花了10天时间设计了JavaScript语言。起初这种脚本语言叫做Mocha,后改名LiveScript,后来为了借助Java语言创造良好的营销效果最终改名为JavaScript。网景公司把这种脚本语言嵌入到了Navigator 2.0之中,使其能在浏览器中运行。
与此相对的是,1996年,微软发布了VBScript和JScript。JScript是对JavaScript进行逆向工程的实现,并内置于Internet Explorer 3中。但是JavaScript与JScript两种语言的实现存在差别,这导致了程序员开发的网页不能同时兼容Navigator和Internet Explorer浏览器。Internet Explorer开始抢夺Netscape的市场份额,这导致了第一次浏览器战争。
Netscape的市场份额逐年萎缩
1996年11月,为了确保JavaScript的市场领导地位,网景将JavaScript提交到欧洲计算机制造商协会(European Computer Manufacturers Association)以便将其进行国际标准化。
1997年6月,ECMA以JavaScript语言为基础制定了ECMAScript标准规范ECMA-262。JavaScript是ECMAScript规范最著名的实现之一,除此之外,ActionScript和JScript也都是ECMAScript规范的实现语言。自此,浏览器厂商都开始逐步实现ECMAScript规范。
1998年6月,ECMAScript2规范发布,并通过ISO生成了正式的国际标准ISO/IEC 16262 。
1999年12月,ECMAScript3规范发布,在此后的十年间,ECMAScript规范基本没有发生变动。ECMAScript3成为当今主流浏览器最广泛使用和实现的语言规范基础。
第一次浏览器战争以IE浏览器完胜Netscape而结束,IE开始统领浏览器市场,份额的最高峰达到2002年的96%。随着第一轮大战的结束,浏览器的创新也随之减少。
动态页面的崛起
JavaScript诞生之后,可以用来更改前端DOM的样式,实现一些类似于时钟之类的小功能。那时候的JavaScript仅限于此,大部分的前端界面还很简单,显示的都是纯静态的文本和图片。这种静态页面不能读取后台数据库中的数据,为了使得Web更加充满活力,以PHP、JSP、ASP.NET为代表的动态页面技术相继诞生。
PHP(PHP:Hypertext Preprocessor)最初是由Rasmus Lerdorf在1995年开始开发的,现在PHP的标准由PHP Group维护。PHP是一种开源的通用计算机脚本语言,尤其适用于网络开发并可嵌入HTML中使用。PHP的语法借鉴吸收C语言、Java和Perl等流行计算机语言的特点,易于一般程序员学习。PHP的主要目标是允许网络开发人员快速编写动态页面。
JSP(JavaServer Pages)是由Sun公司倡导和许多公司参与共同创建的一种使软件开发者可以响应客户端请求,从而动态生成HTML、XML或其他格式文档的Web网页的技术标准。JSP技术是以Java语言为基础的。1999年,JSP1.2规范随着J2EE1.2发布。
ASP(Active Server Pages)1.0 在1996年随着IIS 3.0 而发布。2002年,ASP.NET发布,用于替代ASP。
随着这些动态服务器页面技术的出现,页面不再是静止的,页面可以获取服务器数据信息并不断更新。以Google为代表的搜索引擎以及各种论坛相继出现,使得Web充满了活力。
随着动态页面技术的不断发展,后台代码变得庞大臃肿,后端逻辑也越来越复杂,逐渐难以维护。此时,后端的各种MVC框架逐渐发展起来,以JSP为例,Struct、Spring等框架层出不穷。
从Web诞生至2005年,一直处于后端重、前端轻的状态。
AJAX的流行
在Web最初发展的阶段,前端页面要想获取后台信息需要刷新整个页面,这是很糟糕的用户体验。
Google分别在2004年和2005年先后发布了两款重量级的Web产品:Gmail和Google Map。这两款Web产品都大量使用了AJAX技术,不需要刷新页面就可以使得前端与服务器进行网络通信,这虽然在当今看来是理所应当的,但是在十几年前AJAX却是一项革命性的技术,颠覆了用户体验。
随着AJAX的流行,越来越多的网站使用AJAX动态获取数据,这使得动态网页内容变成可能,像Facebook这样的社交网络开始变得繁荣起来,前端一时间呈现出了欣欣向荣的局面。
AJAX使得浏览器客户端可以更方便地向服务器发送数据信息,这促进了Web 2.0的发展。
Google Trend: AJAX从2005年开始得到开发人员的广泛关注
前端兼容性框架的出现
IE在第一次浏览器大战中击败Netscape赢得胜利,垄断了浏览器市场。作为独裁者,IE并不遵循W3C的标准,IE成了事实标准。
Netscape于1998年被AOL收购前创建了Mozilla社区,Firefox于2004年11月首次发布,并且9个月内下载量超过6000万,获取了巨大的成功,IE的主导地位首次受到了挑战,Firefox被认为是Netscape的精神续作。
之后Firefox浏览器一路奋起直追,逐渐蚕食IE市场份额,这引发了第二次浏览器战争。在2008年底时,Firefox的市场份额达到了25%以上,IE则跌至65%以下。
第二次浏览器战争中,随着以Firefox和Opera为首的W3C阵营与IE对抗程度的加剧,浏览器碎片化问题越来越严重,不同的浏览器执行不同的标准,对于开发人员来说这是一个恶梦。
为了解决浏览器兼容性问题,Dojo、jQuery、YUI、ExtJS、MooTools等前端Framework相继诞生。前端开发人员用这些Framework频繁发送AJAX请求到后台,在得到数据后,再用这些Framework更新DOM树。
其中,jQuery独领风骚,几乎成了所有网站的标配。Dojo、YUI、ExtJS等提供了很多组件,这使得开发复杂的企业级Web应用成为可能。
Google Trend: 蓝色jQuery,红色Dojo,绿色YUI,紫色ExtJS,黄色MooTools
HTML5
1999年,W3C发布了HTML 4.0.1版本,在之后的几年,没有再发布更新的Web标准。随着Web的迅猛发展,旧的Web标准已不能满足Web应用的快速增长。
2004年6月,Mozilla基金会和Opera软件公司在万维网联盟(W3C)所主办的研讨会上提出了一份联合建议书,其中包括Web Forms 2.0的初步规范草案。建议举行一次投票,以表决W3C是否应该扩展HTML和DOM,从而满足Web应用中的新需求。研讨会最后以8票赞成,14票反对否决此建议,这引起一些人的不满,不久后,部分浏览器厂商宣布成立网页超文本技术工作小组(WHATWG),以继续推动该规范的开发工作,该组织再度提出Web Applications 1.0规范草案,后来这两种规范合并形成HTML5。2007年,获得W3C接纳,并成立了新的HTML工作团队。2008年1月22日,第一份正式草案发布。
HTML5草案发布不久,Google在2008年12月发布了Chrome浏览器,加入了第二次浏览器大战当中。Chrome使用了Safari开源的WebKit作为布局引擎,并且研发了高效的JavaScript引擎V8。
尽管HTML5在网络开发人员中非常出名了,但是它成为主流媒体的一个话题是在2010年的4月,当时苹果公司的CEO乔布斯发表一篇题为“对Flash的思考”的文章,指出随着HTML5的发展,观看视频或其它内容时,Adobe Flash将不再是必须的。这引发了开发人员间的争论,包括HTML5虽然提供了加强的功能,但开发人员必须考虑到不同浏览器对标准不同部分的支持程度的不同,以及HTML5和Flash间的功能差异。
在第二次浏览器大战中,各个浏览器厂商都以提升JavaScript运行效率和支持HTML5各种新特性为主要目标,促进了浏览器的良性竞争。在这一场战争中,Chrome攻城略地,抢夺IE市场份额。2013年,Chrome超过IE,成为市场份额最高的浏览器。2016年,Chrome占据了浏览器市场的半壁江山。
全球浏览器市场份额(2009-2017)
自2008年以来,浏览器中不断支持的HTML5新特性让开发者激动不已:WebWorker可以让JavaScript运行在多线程中,WebSocket可以实现前端与后台的双工通信,WebGL可以创建Web3D网页游戏......
桌面浏览器对HTML5支持程度(2009-2017)
2014年10月28日,W3C正式发布HTML 5.0推荐标准。
Node.js的爆发
早在1994年,Netspace就公布了其Netspace Enterprise Server中的一种服务器脚本实现,叫做LiveWire,是最早的服务器端JavaScript,甚至早于浏览器中的JavaScript。对于这门图灵完备的语言,Netspace很早就开始尝试将它用在后端。
微软在1996年发布的IE 3.0中内嵌了自己的JScript语言,其兼容JavaScript语法。1997年年初,微软在它的服务器IIS 3.0中也包含了JScript,这就是我们在ASP中能使用的脚本语言。
1997年,Netspace为了用Java实现JavaScript而创建了Rhino项目,最终Rhino演变成一个基于Java实现的JavaScript引擎,由Mozilla维护并开源。Rhino可以为Java应用程序提供脚本能力。2006年12月,J2SE 6将Rhino作为Java默认的脚本引擎。
SpiderMonkey是Mozilla用C/C++语言实现的一个JavaScript引擎,从Firefox 3.5开始作为JavaScript编译引擎,并被CouchDB等项目作为服务端脚本语言使用。
可以看到,JavaScript最开始就能同时运行在前后端,但时在前后端的待遇却不尽相同。随着Java、PHP、.Net等服务器端技术的风靡,与前端浏览器中的JavaScript越来越流行相比,服务端JavaScript逐渐式微。
2008年Chrome发布,其JavaScript引擎V8的高效执行引起了Ryan Dahl的注意。2009年,Ryan利用Chrome的V8引擎打造了基于事件循环的异步I/O框架——Node.js诞生。
Node.js具有以下特点:
基于事件循环的异步I/O框架,能够提高I/O吞吐量
单线程运行,能够避免了多线程变量同步的问题
使得JavaScript可以编写后台代码,前后端编程语言统一。
Node.js的出现吸引了很多前端开发人员开始用JavaScript开发服务器代码,其异步编程风格也深受开发人员的喜爱。Node.js的伟大不仅在于拓展了JavaScript在服务器端的无限可能,更重要的是它构建了一个庞大的生态系统。
2010年1月,NPM作为Node.js的包管理系统首次发布。开发人员可以按照CommonJS的规范编写Node.js模块,然后将其发布到NPM上面供其他开发人员使用。目前NPM具有40万左右的模块,是世界上最大的包模块管理系统。
2016年常见包管理系统模块数量,NPM高居榜首
Node.js也催生了node-webkit等项目,用JavaScript开发跨平台的桌面软件也成为可能。Node.js给开发人员带来了无穷的想象,JavaScript大有一统天下的趋势。
前端MV*架构
随着HTML5的流行,前端不再是人们眼中的小玩意,以前在C/S中实现的桌面软件的功能逐步迁移到了前端,前端的代码逻辑逐渐变得复杂起来。
以前只用于后台的MV*等架构在前端逐渐使用起来,以下列举了部分常用的MV*框架。
随着这些MV*框架的出现,网页逐渐由Web Site演变成了Web App,最终导致了复杂的单页应用( Single Page Application)的出现。
移动Web和Hybrid App
随着iOS和Android等智能手机的广泛使用,移动浏览器也逐步加强了对HTML5特性的支持力度。
移动浏览器对HTML5支持程度(2009-2017)
移动浏览器的发展,导致了流量入口逐渐从PC分流到移动平台,这是Web发展的新机遇。移动Web面临着更大的碎片化和兼容性问题,jQuery Mobile、Sencha Touch、Framework7、Ionic等移动Web框架也随之出现。
相比于Native App,移动Web开发成本低、跨平台、发布周期短的优势愈发明显,但是Native App的性能和UI体验要远胜于移动Web。移动Web与Native App孰优孰劣的争论愈演愈烈,在无数开发者的实践中,人们发现两者不是替代关系,而是应该将两者结合起来,取长补短,Hybrid技术逐渐得到认同。
Hybrid技术指的是利用Web开发技术,调用Native相关API,实现移动与Web二者的有机结合,既能体现Web开发周期短的优势,又能为用户提供Native体验。
根据实现原理,Hybrid技术可以分为两大类:
1. 将HTML5的代码放到Native App的WebView控件中运行,WebView为Web提供宿主环境,JavaScript代码通过WebView调用Native API。典型代表有PhoneGap(Cordova)以及国内的AppCan等。
2. 将HTML5代码针对不同平台编译成不同的原生应用,实现了Web开发,Native部署。这一类的典型代表有Titanium和NativeScript。
Hybrid一系列技术中很难找出一种方案适应所有应用场景,我们需要根据自身需求对不同技术进行筛选与整合。
ECMAScript6
JavaScript语言是ECMAScript标准的一种实现,截止2017年2月,ECMAScript一共发布了7个版本。
1997年6月, ECMAScript 1.0标准发布。
1998年6月,ECMAScript 2.0发布。
1999年12月,ECMAScript 3.0发布。
2007年10月,Mozilla主张的ECMAScript 4.0版草案发布,对3.0版做了大幅升级,该草案遭到了以Yahoo、Microsoft、Google为首的大公司的强烈反对,JavaScript语言的创造者Brendan Eich和IE架构师Chris Wilson甚至在博客上就ES4向后兼容性问题打起了口水仗,最后由于各方分歧太大,ECMA开会决定废弃中止ECMAScript 4.0草案。经各方妥协,在保证向下兼容的情况下,将部分增强的功能放到ECMAScript 3.1标准中,将原有ECMAScript 4.0草案中激进的功能放到以后的标准中。不久,ECMAScript 3.1就改名为ECMAScript 5。
2009年12月,本着'Don’t break the web'原则,ECMAScript 5发布。新增了strict模式、属性getter和setter等。
2011年6月,ECMAScript 5.1发布。
2015年6月,ECMAScript 6.0发布。该版本增加了许多新的语法,包括支持let、const、Arrow function、Class、Module、Promise、Iterator、Generator、Set、Map、async、Symbol、Proxy、Reflect、Decorator等。TC39委员会计划以后每年都发布一个新版本的ECMAScript,所以ECMAScript 6.0改名为ECMAScript 2015。
2016年6月,在ECMAScript 2015的基础上进行了部分增强,发布了ECMAScript 2016。
在ECMAScript的各个版本中,ECMAScript 6.0无疑最受人瞩目的,它增加了许多新特性,极大拓展了JavaScript语法和能力,以至于许多浏览器都只能支持部分ES6中的新特性。随之,Babel和TypeScript逐渐流行起来,编写ES6代码,然后用Babel或TypeScript将其编译为ES5等浏览器支持的JavaScript。
ECMAScript以后每年将会发布一个新版本,这无疑将持续促使浏览器厂商不断为JavaScript注入新的功能与特性,JavaScript走上了快速发展的正轨。
今天
今天的前端已经不再是网页诞生之初的样子,每天都有新的技术框架涌现。
GitHub + NPM/BOWER + ES6/ES7/Babel/TypeScript + HTML5 + CSS3/SASS/LESS/PostCSS + React/Vue/Angular + Webpack/Browserify/Gulp/Grunt + Node.js/Express/KOA + Hybrid
这就是今天的前端。
参考资料
摘自前端发展简史