静态网页的诞生
1989年,在欧洲粒子物理实验室(粒子物理研究通常与来自世界各地的研究所进行合作)的IT部门工作的Tim Berners-Lee向其领导提出了一项名为Information Management: A Proposal的提议:使来自世界各地的远程站点的研究人员能够组织和汇集信息,在个人计算机上访问大量的科研文献,并建议在文档中链接其他文档,这就是Web的原型。

1990年,Tim以超文本语言HTML为基础在NeXT电脑上发明了最原始的Web浏览器。

1991年,Tim作为布道者在Internet上广泛推广Web的理念,与此同时,美国国家超算应用中心(National Center for Supercomputer Applications)对此表现出了浓厚的兴趣,并开发了名为Mosaic的浏览器,于1993年4月进行了发布。

1994年5月,第一届万维网大会在日内瓦召开。

1994年7月,HTML2规范发布。

1994年9月,因特网工程任务组(Internet Engineering Task Force)设立了HTML工作组。

1994年11月,Mosaic浏览器的开发人员创建了网景公司(Netscape Communications Corp.),并发布了Mosaic Netscape 1.0 beta浏览器,后改名为Navigator。

万维网(W3C)诞生
1994年底,由Tim牵头的万维网联盟(World Wide Web Consortium)成立,这标志着万维网的正式诞生。

此时的网页以HTML为主,是纯静态的网页,网页是“只读”的,信息流只能通过服务器到客户端单向流通,由此世界进入了Web 1.0时代。

W3C 在 1994 年被创建的目的是,为了完成麻省理工学院(MIT)与欧洲粒子物理研究所(CERN)之间的协同工作,并得到了美国国防部高级研究计划局(DARPA)和欧洲委员会(European Commission)的支持。

W3C 最重要的工作是发展 Web 规范(称为推荐,Recommendations),这些规范描述了 Web 的通信协议(比如 HTML 和 XHTML)和其他的构建模块。

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年,一直处于后端重、前端轻的状态。

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 不再继续,宣告死亡

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

知识扩展

  • 前端发展简史
  • 前端发展史

Web(万维网)发展简史相关推荐

  1. 【前端之旅】Web前端发展简史

    一名软件工程专业学生的前端之旅,记录自己对三件套(HTML.CSS.JavaScript).Jquery.Ajax.Node.js.Vue.Axios.小程序开发(Uniapp)以及各种UI组件库.前 ...

  2. WEB发展简史,Web1.0到Web3.0的发展历程

    WEB World Wide Web 万维网,通常指的是网页和网站,现在已经是互联网的代名词,也是互联网中重要的核心部分.到目前为止,web发展已经有将近30年的历史了,万维网也经历了web1.0到w ...

  3. Web发展简史((webapp+Java原生)移动端开发 )+web网站)

    Web发展简史--------->((webapp+Java原生)移动端开发(微信小程序,公众号,头条app))+web网站) Web发展简史 1:在那时,Web开发还比较简单,开发者经常会去操 ...

  4. 【转载】人工智能发展简史

    网络查阅资料时候,看到的对人工智能发展简史,较为完整的讲述,故转载,仅供学习使用,原文链接:https://www.aminer.cn/ai-history.侵删. 人工智能到底是什么?通常来说,人工 ...

  5. 网络层协议(1):Internet 发展简史(上)

    Internet 发展简史(上) 1989年,黑豹绝对想不到,那个跟他们在东直门附近晃悠的姑娘,会给整个乐队带来怎样的命运巨变,会给整个乐坛带来怎样的惊艳传奇. 那个姑娘叫王菲. 我读到这段文字时,恍 ...

  6. 80老翁谈人生(213):互联网内容搜搜发展简史

    80老翁谈人生(213):互联网内容搜搜发展简史 说明,此文内容较长,可供资料查询之用.建设网络强国,不懂历史不行. 回顾历史,1982年,SUN公司提出"网络就是计算机"概念之后 ...

  7. 八大编程知名编程语言或系统的发展简史

    知名编程语言或系统的发展简史 一.B语言 B语言之父:Ken Thompson(肯.汤普森).B语言是贝尔实验室开发的一种通用的程序设计语言,它是于1969年前后Ken Thompson(肯.汤普森) ...

  8. python百度百科-Python语言的发展简史

    本文主要向大家介绍了Python语言的发展简史,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. Python是我喜欢的语言,简洁.优美.易用.前两天,我很激昂地向朋友宣传Pytho ...

  9. 互联网发展简史(1)ARPANET的建立

    原文为知乎,现转移到个人博客. 知乎原文 原文为微信公众号原文,现转移到个人博客. 微信公众号原文 互联网发展简史(1)ARPANET的建立 目录 [TOC] Internet发展简史(ARPANET ...

最新文章

  1. Python十大装腔语法
  2. python:将32位的16进制数据以二进制/hex/binary的形式写入到文件
  3. php 错误记录_PHP中把错误日志保存在系统日志中(Windows系统)
  4. python你会吗_Python这些问题你会吗?
  5. tomcat高版本之URL解析异常解决
  6. Python二叉树遍历
  7. 如何使用PHP中的字符串函数
  8. 学习可以借鉴的大牛们的网站
  9. Java 分支与循环
  10. 【杆号识别】基于matlab铁路接触网系统杆号识别【含Matlab源码 1056期】
  11. 电视、家庭影院、音响、电影院、中高端声卡测试多声道测试样片
  12. python-docx页眉横线
  13. vue 实现html转图片和生成二维码
  14. 全国计算机英语四六级准考证打印,周六开考!2020年11月四六级口语考试准考证打印通知!...
  15. 【IoT】 产品设计:结构设计流程
  16. Nginx配置域名重定向/域名跳转
  17. 【BZOJ4372】烁烁的游戏(点分树)
  18. 【C语言】数组详解,初学者一看就懂
  19. Resharper快捷键
  20. 如何远程操控桌面实现远程管理运维?

热门文章

  1. 数据库技术之MVCC
  2. Spring之DI注入方式
  3. 在VS Code中开启gdb的pretty-printer功能
  4. C++ 三维空间的点(继承)
  5. Java SHA-256 算法实例
  6. 什么是死锁?死锁的预防?
  7. mysql association_在mybatis的xml中添加association不生效
  8. eclipse IDE
  9. Python数据可视化——图型参数介绍
  10. IT信息技术-1.1 信息系统与信息化