头图

WEB开发行业大事记

90年代初,CERN提出了WEB的概念,即A计算机可以访问B计算机的数据,和B计算机进行交互。

93年,CGI技术出现,在它出现之前,网页都是静态的,CGI最主要的作用,是支持服务端动态生成网页,浏览器不再是单纯的访问者,可以主动向服务端提交数据了。

94年底,W3C组织成立,主要作用是制定WEB规范。同年,网景浏览器发布。

95年,JS语言出现,微软发布IE浏览器1.0版本,浏览器大战开始。

96年,ECMAScript1.0规范由W3C组织推出。同年,FLASH技术出现,网页开始转向可交互的,承载富媒体的方向发展。

97年,CSS规范1.0版本由W3C组织推出。

98年,W3C推出CSS2.0规范。ECMAScript2.0规范推出,同年,网景被AOL(美国在线)收购,浏览器大战以微软的IE胜出为标志暂告一段落。

99年,ECMAScript3.0规范推出。由于IE当时的垄断,导致IE有足够的底气拒绝遵循W3C规范,WEB行业的创新进程也因此短暂停滞了一段时间。同年,微软提出了ActiveX异步加载的技术,这一技术后面演变成了AJAX。

2001年,微软发布IE6,此时IE浏览器占据了80%的市场份额。

2002年,Mozilla社区发布了XMLHttpRequest技术(也就是AJAX),SPA(单页面应用)的开发方式出现。

2004年,谷歌发布Gmail,推动行业转向使用AJAX制作SPA,同年,火狐浏览器(网景浏览器的精神续作)发布,浏览器大战又开始了。

2005年,谷歌发布Goole Map,继续大量使用AJAX技术,推动行业转型。WEB开发开始转向前后端分离的模式,前端行业逐步形成。

2006年,JS类库jQuery出现,主要作用是增强JS的事件处理和DOM操作能力。

2007年,苹果发布初代iPhone,首次实现了在移动端浏览网页的比较好的体验,由此开启了移动互联网的时代。

2008年,W3C组织推出HTML5标准草案,同年,谷歌推出Chrome浏览器,加入浏览器大战。

2009年,ECMAScript5标准推出,同年,Mozilla社区提出了JS在服务端运行的设想,并推出了JS的服务端模块化规范,此规范最初名称是ServerJS,后面改成了CommonJS,同年,NODEJS出现,它借鉴了部分CommonJS的规范,但并不是完全遵循CommonJS,NODEJS最大的贡献是把JS语言的应用范围拓展到了服务端,JS不再是只能在浏览器内跑的脚本语言。所以后续谈到JS,需要区分到底是浏览器端的JS还是服务端的JS。

2010年,这一年事情比较多,具体如下:

  • James Burke提出了AMD规范,这个规范主要用于JS在浏览器端如何实现模块化开发,实际上同期还有其他的一些模块化规范,也都是用来解决浏览器端JS开发问题。
  • 实现MVVM理念的前端框架开始出现,谷歌推出了AngularJS框架,其他的还有微软的Knockout和Backbone,由此前端行业开始转向开发SPA的阶段。
  • JS在服务端的发展方面,NODEJS引入了NPM功能,适配NODEJS的服务端框架Express出现。

2011年,前端构建工具broswerify出现,前端开发流程开始往自动化和预处理方向发展。

2012年,前端构建工具webpack出现。

2013年,前端框架REACT出现并开源,同年,Chrome浏览器市场份额首次超过IE。

2014年,W3C组织推出HTML5标准正式版,同年,国人熟悉的前端框架VUE出现。

2015年,ECMAScript6标准推出,借鉴CommonJS理念制定了ES Module规范。同年,微软宣布放弃IE品牌,转向Edge浏览器。

2016年至今,没有革命性地变化,前端行业整体转向移动互联网,SPA的开发方式成为主流,前端开发依然采用预处理+打包发布的方式进行,各个前端框架都推出了自己的CLI构建工具。JS作为服务端方面NODEJS相关生态也在不断完善。

总结《Web研发模式演变》

看了一下玉伯在2014年写的《Web研发模式演变》一文,我总结了一下:

早期时代,纯后端开发,使用JAVA SERVLET类技术进行开发,因为很久没用JAVA SERVLET了所以这里简单回顾一下,具体如下:

1.0时代

JAVA SERVLET的核心理念是一个SERVLET类对应一个请求URL,之后在SERVELT内部要做所有的事情,可以配合JSP实现模板引擎渲染。

早期时代的优点是简单,缺点是不能适应大规模开发,一旦业务需求比较复杂,拓展性和可维护性就不好了。

之后进入了MVC时代,是后端MVC,最大进步是在对SERVLET中的各种操作进行了细化和抽象,具体如下:

2.0时代

看上去MVC时代和之前没有太大区别,一类请求用一个MVC结构处理,MVC内部分了3个部分,但实际上MVC内部是可以互相调用的,比如请求类型B可能会用到请求类型A对应的MVC内的DAO处理。

MVC时代依然是重后端的开发方式,所以前后端在代码不分离,但在分工上需要做分离,会导致很多问题,比如前端人员在开发时往往需要本地编写离线的HTML的DEMO,之后交给后端人员,被改成实际的JSP,如果后端人员水平有限,就需要前端人员在HTML转JSP的过程中也参与,沟通成本较大。另外控制器也是由后端人员控制的(声明URL,以及URL和模板引擎的对应关系),但实际上页面中的各种URL又是由前端人员编写的(URL的声明),同一个事情让2个人去做,职责不清也会增加开发成本和沟通成本。

之后因为2004~2005年AJAX技术被谷歌大力推广,使得WEB开发进入了实质上的前后端分离时代,具体如下:

3.0时代

当请求过来的时候,服务端直接返回静态HTML页面,之后在浏览器端使用AJAX向后端MVC服务器发送请求获取数据,MVC服务器也就只返回数据,之后静态页面的JS用数据渲染出动态页面。如果是非SPA,那服务器返回的HTML可以是多个不同的,如果是SPA,则服务器返回的HTML文件只有一份,其余部分都用JS渲染实现,一般会用前端框架处理页面功能组件化复用问题,路由问题,AJAX问题,模板引擎渲染等等问题。

这个模式还有一些变种,比如把JS渲染HTML的部分交给另一个服务器(一般是NODEJS)处理,也就是中途岛模式,中间服务器负责返回静态HTML,发送AJAX到后端服务器(接收静态HTML发送的AJAX),渲染数据,返回HTML字符串给静态HTML页面,静态HTML页面的JS逻辑可以比较简单,主要是把中间服务器响应的HTML片段替换DOM。

前后端分离是为了应对复杂业务产生的,开发难度就之前的方式更为复杂,前后端交互的接口规范是一个重点,两方除了初始约定好之外,后续开发中及时保持沟通也很重要,另外使用JS渲染HTML还会遇到浏览器性能问题,SEO问题等等。

由于NODEJS也是用JS编写的,而JS是一种可以直接在浏览器和服务端都运行的语言,因此到目前还有一种所谓全栈式开发,即用NODEJS处理所有问题,相当于是回归到了早期时代的开发方式,一种语言包揽所有功能,前端部分使用NODEJS引入前端框架打包开发,后端部分使用NODEJS参考JAVA体系的MVC开发方式做成API服务器,前端部分的一些业务校验逻辑,对应的JS也可以在后端部分使用。当然用NODEJS做全栈还有很多细节需要考虑,比如性能问题,安全问题,数据库的对接问题,对不同操作系统上部署的兼容性问题等等。


Arctic7
1 声望0 粉丝