共计 8177 个字符,预计需要花费 21 分钟才能阅读完成。
前端倒退简史
image.png
- 1990 HTML
1990 年,Tim 以超文本语言 HTML 为根底在 NeXT 电脑上创造了最原始的 Web 浏览器。
1991 年,Tim 作为布道者在 Internet 上宽泛推广 Web 的理念,与此同时,美国国家超算利用核心(National Center for Supercomputer Applications)对此体现出了浓重的趣味,并开发了名为 Mosaic 的浏览器,于 1993 年 4 月进行了公布。
1994 年 5 月,第一届万维网大会在日内瓦召开。
- 1994.7 HTML 2.0 标准公布
1994 年 9 月,因特网工程工作组(Internet Engineering Task Force)设立了 HTML 工作组。
1994 年 11 月,Mosaic 浏览器的开发人员创立了网景公司(Netscape Communications Corp.),并公布了 Mosaic Netscape 1.0 beta 浏览器,后改名为 Navigator。
- 1994 万维网联盟(World Wide Web Consortium)成立,简称 W3C
1994 年底,由 Tim 牵头的万维网联盟(World Wide Web Consortium)成立,这标记着万维网的正式诞生。
此时的网页以 HTML 为主,是纯动态的网页,网页是“只读”的,信息流只能通过服务器到客户端单向流通,由此世界进入了 Web 1.0 时代。
- 1995 网景推出 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 的市场份额,这导致了第一次浏览器和平。
第一次浏览器和平
1996 年 11 月,为了确保 JavaScript 的市场领导位置,网景将 JavaScript 提交到欧洲计算机制造商协会(European Computer Manufacturers Association)以便将其进行国内标准化。
- 1996.12 W3C 推出了 CSS 1.0 标准
1997.1 HTML3.2 作为 W3C 举荐规范公布
- 1997.6 ECMA 以 JavaScript 语言为根底制订了 ECMAScript 1.0 标准规范
1997 年 6 月,ECMA 以 JavaScript 语言为根底制订了 ECMAScript 标准规范 ECMA-262。JavaScript 是 ECMAScript 标准最驰名的实现之一,除此之外,ActionScript 和 JScript 也都是 ECMAScript 标准的实现语言。自此,浏览器厂商都开始逐渐实现 ECMAScript 标准。
- 1997.12 HTML 4.0 标准公布
- 1998 W3C 推出了 CSS 2.0 标准
- 1998.6 ECMAScript 2 标准公布
1998 年 6 月,ECMAScript 2 标准公布,并通过 ISO 生成了正式的国际标准 ISO/IEC 16262。
- 1999.12 ECMAScript 3 标准公布
1999 年 12 月,ECMAScript 3 标准公布,在尔后的十年间,ECMAScript 标准根本没有产生变动。ECMAScript 3 成为当今支流浏览器最宽泛应用和实现的语言标准根底。
第一次浏览器和平以 IE 浏览器完胜 Netscape 而完结,IE 开始统领浏览器市场,份额的最高峰达到 2002 年的 96%。随着第一轮大战的完结,浏览器的翻新也随之缩小。
image
XHTML
- 1999 W3C 公布 HTML 4.01 规范,同年微软推出用于异步数据传输的 ActiveX,随即各大浏览器厂商模拟实现了 XMLHttpRequest(AJAX 雏形)。
- 2000: W3C 采纳了一个大胆的打算,把 XML 引入 HTML,XHTML1.0 作为 W3C 举荐规范公布
- 2001.5 W3C 推出了 CSS 3.0 标准草案
- 2002-2006 XHTML 2.0 最终放弃
- 2009 W3C 发表 XHTML2.0 不再持续,宣告死亡
动静页面的崛起
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 年,JSP 1.2 标准随着 J2EE 1.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 的倒退。
image
Google Trend: AJAX 从 2005 年开始失去开发人员的宽泛关注。
2006 XMLHttpRequest 被 W3C 正式纳入规范。
第二次浏览器大战
- 前端兼容性框架的呈现
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 利用成为可能。
image
Google Trend: 蓝色 jQuery,红色 Dojo,绿色 YUI,紫色 ExtJS,黄色 MooTools
HTML 5
1999 年,W3C 公布了 HTML 4.01 版本,在之后的几年,没有再公布更新的 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 日,第一份正式草案公布。
- 2008.12 Chrome 公布,JavaScript 引擎 V8
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 占据了浏览器市场的半壁江山。
image
寰球浏览器市场份额(2009-2017)
自 2008 年以来,浏览器中一直反对的 HTML5 新个性让开发者激动不已:WebWorker 能够让 JavaScript 运行在多线程中,WebSocket 能够实现前端与后盾的双工通信,WebGL 能够创立 Web3D 网页游戏…
image
桌面浏览器对 HTML5 反对水平(2009-2017)
- 2009.12 ECMAScript 5.0 标准公布
- 2011.6 ECMAScript 5.1 标准公布
- 2012.10 微软公布 TypeScript 公开版
TypeScript 是一种由微软开发的自在和开源的编程语言。它是 JavaScript 的一个超集,而且实质上向这个语言增加了可选的动态类型和基于类的面向对象编程。
TypeScript 扩大了 JavaScript 的语法,所以任何现有的 JavaScript 程序能够不加扭转的在 TypeScript 下工作。TypeScript 是为大型利用之开发而设计,而编译时它产生 JavaScript 以确保兼容性。
- 2013.6.19 TypeScript 0.9 正式版
- 2014.10.28 W3C 正式公布 HTML 5.0 举荐规范
- 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 万左右的模块,是世界上最大的包模块管理系统。
image
2016 年常见包管理系统模块数量,NPM 高居榜首
Node.js 也催生了 node-webkit 等我的项目,用 JavaScript 开发跨平台的桌面软件也成为可能。Node.js 给开发人员带来了无穷的设想,JavaScript 大有一统天下的趋势。
前端 MV* 架构
随着 HTML5 的风行,前端不再是人们眼中的小玩意,以前在 C/S 中实现的桌面软件的性能逐渐迁徙到了前端,前端的代码逻辑逐步变得复杂起来。
以前只用于后盾的 MV 等架构在前端逐步应用起来,以下列举了局部罕用的 MV 框架。
image
随着这些 MV* 框架的呈现,网页逐步由 Web Site 演变成了 Web App,最终导致了简单的单页利用(Single Page Application)的呈现。
挪动 Web 和 Hybrid App
随着 iOS 和 Android 等智能手机的宽泛应用,挪动浏览器也逐渐增强了对 HTML5 个性的反对力度。
image
挪动浏览器对 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 技术能够分为两大类:
将 HTML 5 的代码放到 Native App 的 WebView 控件中运行,WebView 为 Web 提供宿主环境,JavaScript 代码通过 WebView 调用 Native API。典型代表有 PhoneGap(Cordova) 以及国内的 AppCan 等。
将 HTML 5 代码针对不同平台编译成不同的原生利用,实现了 Web 开发,Native 部署。这一类的典型代表有 Titanium 和 NativeScript。
Hybrid 一系列技术中很难找出一种计划适应所有利用场景,咱们须要依据本身需要对不同技术进行筛选与整合。
ECMAScript 6
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 走上了疾速倒退的正规。
参考资料
前端倒退简史
前端发展史