前言

近年来,随着前端的丰富,前后端分离是趋势。各种东西如雨后春笋一般,层出不穷。node.js的出现,使前端真正意义上变成了大前端。

前端由来之HTML发展史

1990 年,Tim Berners-Lee以超文本语言 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)成立,这标志着万维网的正式诞生。

JavaScript应运而生

1995 年,网景工程师 Brendan Eich 花了10天时间设计了 JavaScript 语言。起初这种脚本语言叫做 Mocha,后改名 LiveScript,后来为了借助 Java 语言创造良好的营销效果最终改名为 JavaScript。网景公司把这种脚本语言嵌入到了 Navigator 2.0 之中,使其能在浏览器中运行。

1996 年 11 月,为了确保 JavaScript 的市场领导地位,网景将 JavaScript 提交到欧洲计算机制造商协会(European Computer Manufacturers Association)以便将其进行国际标准化。

1997.6 ECMA 以 JavaScript 语言为基础制定了 ECMAScript 1.0 标准规范

1997 年 6 月,ECMA 以 JavaScript 语言为基础制定了 ECMAScript 标准规范 ECMA-262。JavaScript 是 ECMAScript 规范最著名的实现之一,除此之外,ActionScript 和 JScript 也都是 ECMAScript 规范的实现语言。自此,浏览器厂商都开始逐步实现 ECMAScript 规范。

1998.6 ECMAScript 2 规范发布

1998 年 6 月,ECMAScript 2 规范发布,并通过 ISO 生成了正式的国际标准 ISO/IEC 16262 。

1999.12 ECMAScript 3 规范发布
1999 年 12 月,ECMAScript 3 规范发布,在此后的十年间,ECMAScript 规范基本没有发生变动。ECMAScript 3 成为当今主流浏览器最广泛使用和实现的语言规范基础。

动态页面的崛起

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 的发展。

前端兼容性框架的出现

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 应用成为可能。

HTML 5技术的诞生

1999年,W3C发布了 HTML 4.01 版本,在之后的几年,没有再发布更新的 Web 标准。随着Web的迅猛发展,旧的Web标准已不能满足 Web 应用的快速增长。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 占据了浏览器市场的半壁江山。自 2008 年以来,浏览器中不断支持的 HTML5 新特性让开发者激动不已:WebWorker 可以让 JavaScript 运行在多线程中,WebSocket 可以实现前端与后台的双工通信,WebGL 可以创建 Web3D 网页游戏。

另外,TypeScript 是一种由微软开发的自由和开源的编程语言。它是 JavaScript 的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程。TypeScript 扩展了 JavaScript 的语法,所以任何现有的 JavaScript 程序可以不加改变的在 TypeScript 下工作。TypeScript 是为大型应用之开发而设计,而编译时它产生 JavaScript 以确保兼容性。

Node.js的爆发

JavaScript 最开始就能同时运行在前后端,但在前后端的待遇却不尽相同。随着 Java、PHP、.Net 等服务器端技术的风靡,与前端浏览器中的 JavaScript 越来越流行相比,服务端 JavaScript 逐渐式微。2008 年 Chrome 发布,其 JavaScript 引擎 V8 的高效执行引起了 Ryan Dahl 的注意。

2009年3月

Ryan 利用 Chrome 的 V8 引擎打造了基于事件循环的异步 I/O 框架 —— Node.js 诞生。 至此,Package Manager 是第一件要考虑的事情,目的在于解决代码复用的问题,通过一套模块定义规范来实现复用,目标是:

1.易声明易公开:很容易定义一个 package 并公开出去

2.易安装易引用:要能轻易引用开源模块,而不需要提供太多的 package 元信息,并且装完之后能够很方便地引用其功能

3.即取即用:package 的版本、校验、配置、安装位置等都不必关心,所有对可用性没有明显影响的问题都应该推迟

4.集中管理:共享同一个 package,方便维护

迄今(2019/6/29)为止,npm 仍具有这些特征,也是早期设计所决定的同年,Ryan Dahl 在 JSConf 发表了关于 Node.js 的首次公开演讲,尝试走出去

2010年

Express 与 Socket.io 是生态发展的必然产物,Express 作为 Node.js 生态中资格最老的 Web 开发框架,至今仍有一些难以替代的优势(比如成熟可靠的生态支持)

Heroku 对 Node.js 提供了实验性的支持,这意味着走出去了一小步。同时,一边推广(Google Tech Talk),一边持续演进(迭代 v0.2.0)

2011年

一系列新手教程的出现意味着大家发现了 Node.js 的(学习)价值,之后 LinkedIn、Uber 陆续上船更是印证了这一点,也标志着 Node.js 正式投入生产使用,算是一个重要的里程碑。

Node.js 诞生 2 年后,其 Package Manager 终于正式面世,就叫 npm。最后集成到 Node.js 安装包中,成为Node 模块管理的事实标准,同时,通过 Reddit 论坛、Youtube 讲故事的方式与社区联动,让更多的思想汇聚起来。

2012年

重构完 libuv 之后,Node.js 核心部分已经趋于完备,创始人 Ryan Dahl 功成身退,将决策权交给 npm 的创始人Isaac Schlueter,Node.js 发展趋于成熟的另一个标志是生态中出现了面向企业的解决方案,例如Hapi

Node.js 诞生 2 年后,其 Package Manager 终于正式面世,就叫 npm。最后集成到 Node.js 安装包中,成为Node 模块管理的事实标准,同时,通过 Reddit 论坛、Youtube 讲故事的方式与社区联动,让更多的思想汇聚起来。

2013年

MEAN 组合实践、Web 开发框架的更迭、CMS 的出现意味着Node.js 生态发展进入百花齐放的阶段。另一方面,伴随着在企业场景中的大规模应用,也逐渐暴露出 Node.js 自身的一些潜在问题,如内存管理

2014年

Node.js 又一次交棒,由一直在项目中起重要作用的Timothy J Fontaine接管。同年,Joyent 公司(Node.js 创始人所在的公司,拥有 Node.js 商标)提议成立顾问委员会,打算从完全开放走向自治:这意味着话语权将从开放的开源社区转移到正在使用 Node.js 的几家大公司手里(Joyent、Netflix 等)此举招致开源社区的强烈抵触,因而 fork 出了 IO.js,继续以完全开放的社区驱动模式快速发展。至此,Node.js 第一次走向分裂。

2015年

Q1: 这场冲向 1.0 版本的竞速赛以 IO.js 获胜告终。继而,顾问委员会中的几大公司联手成立了 Node.js 基金会,表态支持社区驱动的开放管理模式。紧接着开源社区作出回应,提议和解,因为管理模式上的冲突已经消除了。

Q2: Node.js 基金会成立后不久,第三任领袖 TJ Fontaine 宣布离开,交由基金会与社区管理。紧接着,和解之后,IO.js 合入 Node.js,从分裂走向统一另外,npm 还提供了私有模块支持,类似于Github 私有仓库,算是对商用的支持。

Q3: IO.js 合入之后,Node.js 迎来了真正意义上的 1.0 版本,版本帝正式从混乱的 0.x 进入 4.x 时代。

Q4: 发布了第一个 LTS 版本,标志着Node.js 进入稳定发布阶段同时,Yahoo、RisingStack 等大公司也纷纷加入基金会,共同参与 Node.js 建设。此外,还召开了第一次 Node Interactive 大会,分享 Node.js 在生产中的应用价值。

2016年

Q1: 一个沸沸扬扬的新闻是 leftpad 事件,暴露出 npm 设计/管理上的一些问题:另外,Express 被纳入孵化项目(incubated project),将获得 Node.js 基金会的技术支持。同时,Google 也加入 Node.js 基金会,队伍越来越壮大。

Q2: npm 注册用户突破 21 万,其中 7 万多人发布过 package。npm 已经成为一个相当庞大的东西,在 Node.js 生态起着不可替代的作用。

Q3: npm 的变化也关乎 Node.js 的发展,像集成安装包一样绑定在一起。另外,第二次 Node Interactive 大会在欧洲举行。

Q4: Yarn 适时推出,算是 npm 客户端的增强版。服务端仍使用 npm registry,这无可撼动继首个 LTS 版本(v4.2.0)之后,v6.0 成为第二个 LTS 版本。

同时,IBM、Microsoft 等巨头开始发力,将 Node.js 推向 8.0 版本另外,继续疯狂开会,第三次 Node Interactive 选在北美。

2017年

Q1: Node.js 的高速发展对行业传统技术栈造成了冲击,为了解决企业面临的人才技能问题,Node.js 基金会推出开发者认证计划,期望通过认证的开发者具备 Node.js 开发能力。NASA 上船标志着“Node.js 上天了”……玩笑,毕竟大型企业上船已经不新奇了。

Q2: Node.js v8.0 发布,巨头发力告一段落,最重要的应该是N-API 支持。在社区+基金会的开放管理模式下,基金会更换领导人已经不再是成立顾问委员会一类的大事了。

Q3: 特性持续迭代,并借助最新 V8 引擎得到一波性能提升。另一件值得关注的事情是,因为 Node.js 基金会下 TSC( Technical Steering Committee,技术指导委员会)的执行力问题,Node.js 再次走向分裂(新的 fork 称为 Ayo,还念 IO.js)。

Q4: 从官方报告来看,Node.js 已经达到了相当大规模的应用。同时,v8.9.0 成为 8.x 的首版 LTS,进入稳定阶段另外,npm 在安全性上也迈出了一小步,支持账号双因子认证。

2018年

Q1: 基金会建站搜罗 Node.js 应用案例,见Application Showcase。另一方面,由于 Node.js 与 JavaScript 密不可分,干脆合作一起开会,就叫 JS Interactive。

Q2: npm 6 在安全方面做了更多的事情,对存在安全问题的 package 有了一些管控措施,如npm audit。HTTP2 等前沿特性也在持续推进,用户调查也没有停下,关注 Node.js 应用趋势另一方面,8.x 时代落幕,进入 10.x,期望搭载V8 引擎 v6.6

Q3: 9 年后,Node.js 的创始人 Ryan Dahl 指出 Node.js 的 10 大设计失误,包括加进来又去掉的 Promise API、安全问题、GYP 构建系统、package.json 入口字段、node_modules 结构等等。回过头看,npm 上大量的案例表明跨版本(从 6.x 到 10.x)的 N-API 支持确有其实践意义。继实验性支持(Node.js 8.5.0 (2017-09-12))之后,正式的 ES Module 支持终于进入议程。

2019年

Q1: 首次介绍基金会内部的工作机制,进一步公开透明。紧接着,Node.js 基金会与 JS 基金会合并,成立 OpenJS 基金会。

Q2: Node.js 创始人再度出发,希望重新建立更好的 Node.js,即deno同时,Node.js 增强了实验性的 ES Module 支持,包括动态引入(import())等,并伴随着 V8 引擎版本升级以及 ES 特性支持,进入 12.x 迭代。另外,npm 经营上似乎有一些变化,出现一波人事变动,可能关乎 Node.js 的发展:因为 Node.js 语言的发展与盈利性质的 npm 公司绑定在一起,一直以来都是个隐患。

node十年心酸史,带你了解大前端的由来!的更多相关文章

  1. 一统江湖的大前端(2)—— Mock.js + Node.js 如何与后端潇洒分手

    <一统江湖的大前端>系列是自己的前端学习笔记,旨在介绍javascript在非网页开发领域的应用案例和发现各类好玩的js库,不定期更新.如果你对前端的理解还是写写页面绑绑事件,那你真的是有 ...

  2. 一个Android开发妹子的找工作心酸史

    阿里:实习二面被KO 1,人生接到的第一个电话面试来自大家都说好的阿里,心情激动,说话颤抖,本以为没有戏,然而第二天接到了二面的电话有点小激动.然后就是被ko了,死的原因很简单,那时候单纯的自己什么都 ...

  3. [置顶] LLVM每日谈之十五 LLVM自带的examples

    作者:snsn1984 在LLVM源码的目录下,有一个目录叫做examples,这个目录下边有几个LLVM的例子,初学者一般不会太关注这些例子,但是这些例子确实是精华中的精华,在LLVM的学习过程中不 ...

  4. 菜鸟成长心酸史之php初遇教程

    phpstorm是我接触到的第二个制作网页的程序,刚拿到php的时候,我是懵逼的,从安装到使用,可以说一点都不会,尤其是它还要配合wampsever使用,即使看视频,不同的制作php的软件也有不同的地 ...

  5. 十几行代码带你用Python批量实现txt转xls,方便快捷

    前天看到后台有一兄弟发消息说目前自己有很多txt 文件,领导要转成xls文件,问用python怎么实现,我在后台简单回复了下,其实完成这个需求方法有很多,因为具体的txt格式不清楚,当然如果是有明确分 ...

  6. 记一次Log4j2日志无法输出的 心酸史

    问题描述:部分日志无法输出到日志文件中. 项目中的代码: @Resource private ConfigInfo configInfo; private static final Logger lo ...

  7. 关于大型网站技术演进的思考(十九)--网站静态化处理—web前端优化—上(11)

    网站静态化处理这个系列马上就要结束了,今天我要讲讲本系列最后一个重要的主题web前端优化.在开始谈论本主题之前,我想问大家一个问题,网站静态化处理技术到底是应该归属于web服务端的技术范畴还是应该归属 ...

  8. 【转】关于大型网站技术演进的思考(十九)--网站静态化处理—web前端优化—上(11)

    网站静态化处理这个系列马上就要结束了,今天我要讲讲本系列最后一个重要的主题web前端优化.在开始谈论本主题之前,我想问大家一个问题,网站静态化处理技术到底是应该归属于web服务端的技术范畴还是应该归属 ...

  9. 大前端-全栈-node+easyui+express+vue+es6+webpack+react

    作者声明:本博客中所写的文章,都是博主自学过程的笔记,参考了很多的学习资料,学习资料和笔记会注明出处,所有的内容都以交流学习为主.有不正确的地方,欢迎批评指正 视频来源:https://www.bil ...

随机推荐

  1. Appium - adb monkey事件(二)

    操作事件简介 Monkey所执行的随机事件流中包含11大事件,分别是触摸事件.手势事件.二指缩放事件.轨迹事件.屏幕旋转事件.基本导航事件.主要导航事件.系统按键事件.启动Activity事件.键盘事 ...

  2. Selenium3自动化测试【20】CSS定位元素

    CSS 指层叠样式表 (CascadingStyleSheets),CSS一种用来表现HTML或XML等文件样式的计算机语言,其能够灵活的为页面提供丰富样式的风格. CSS使用选择器为页面元素绑定属性 ...

  3. 【强连通分量】Proving Equivalences

    [题目链接]hdu-2767 [题目描述] Consider the following exercise, found in a generic linear algebra textbook. L ...

  4. vulnhub-XXE靶机渗透记录

    准备工作 在vulnhub官网下载xxe靶机 导入虚拟机 开始进行渗透测试 信息收集 首先打开kali,设置成NAT模式 查看本机ip地址 利用端口扫描工具nmap进行探测扫描 nmap -sS 19 ...

  5. sqlite无法保存数据

    springboot使用连接sqlite数据,使用jdbc:sqlite::resource:db/XXX.db方式连接数据库为只读,使用绝对路径才可以写入.

  6. 第一篇 -- Jmeter的安装下载

    参考链接:https://blog.csdn.net/wust_lh/article/details/86095924 本篇介绍的是在Windows下安装Jmeter. 一.下载Jmeter 官网下载 ...

  7. HTTP协议GET方法传参最大长度理解误区

    结论 HTTP 协议未规定GET和POST的长度 GET的最大长度是因为浏览器和WEB服务器显示了URI的长度 不同浏览器和WEB服务器,限制的最大长度不同 若要支持IE,则最大长度为2083 byt ...

  8. Intouch/ifix关于语音报警的一种设置思路

    工控项目最近升级改造,需要使用Intouch/ifix提供一个语音报警功能.这个不像先前提供的单一的声音报警,业主方要求能详细的提供某某水泵或者是某某设备故障报警,这就要求我们这边对语音解析或者基础控 ...

  9. 字符串匹配算法(三)-KMP算法

    今天我们来聊一下字符串匹配算法里最著名的算法-KMP算法,KMP算法的全称是 Knuth Morris Pratt 算法,是根据三位作者(D.E.Knuth,J.H.Morris 和 V.R.Prat ...

  10. 不想用Spring全家桶?试试这个国产JFinal框架

    前言 逃离北上广从广州回老家南宁,入职这家公司用的技术是JFinal,借此机会得以学习这个国产的MVC框架,经过一段时间的学习,基于之前的经验搭建一个通用项目jfinal-demo jfinal-de ...