前言喜欢聊一些新奇的技术,也喜欢学习新的东西。在这个日益繁荣的时代,见证科技的发展是一件很美好的事情。前端简史技术的发展总是遇到问题,解决问题,然后不断地遇到问题,解决问题。前端最初称为Front-end。主要用于收集输入信息和呈现界面效果。前端的发展始于Tim在1990年发明了最原始的浏览器。在Tim的推动下,美国国家超级计算应用中心开发了名为Mosaic的浏览器并于1993年4月发布;次年,第一届万维网大会在日内瓦召开。同年7月,Html2.0规范发布。11月,Netscape成立,发布第一代浏览器,改名为Navigator。1994年底,W3C成立。至此,进入静态网页时代。那是web1.0时代。1995年,Netscape工程师BrendanEich花了10天时间设计了JavaScript语言。相比之下,微软在1996年发布了VBScript和JScript。第一次浏览器大战开始了。同年11月,Netscape将javascript推向国际化,1997年6月,ECMA制定了基于JavaScript语言的ECMAScript1.0标准规范。第一次浏览器大战以IE浏览器打败Netscape而告终,IE开始主导浏览器市场,2002年占有率峰值达到96%。随着第一轮大战的结束,浏览器创新也随之减少。作为一个独裁者,IE不遵循W3C标准,IE成为事实上的标准。js的诞生可以说开启了动态网页的时代。为了使Web更加动态化,以PHP、JSP、ASP.NET为代表的动态页面技术相继诞生。直到谷歌在2004年和2005年发布了两款重量级Web产品:Gmail和GoogleMap。这两款web产品都大量使用了AJAX技术,让前端在不刷新页面的情况下与服务器通信,颠覆了用户体验,这也体现了Ajax最大的特点就是局部刷新。Ajax的流行意味着我们进入了Web2.0时代,即客户端向服务器端发送信息更加方便。随着Firefox的出现,直接引发了第二次浏览器大战。在第二次浏览器大战中,随着以Firefox和Opera为首的W3C阵营对IE的对抗愈演愈烈,浏览器碎片化问题越来越严重,不同的浏览器执行不同的标准。是一场噩梦。为了解决这个问题,诞生了很多兼容的js框架,而JQ在众多同类框架中脱颖而出,一马当先,几乎成为了行业的标配。然而,随着Web应用的增多,旧的标准已难以满足需求。2008年1月22日,H5草案发布。同年12月,Chrome发布JavaScript引擎V8,加入浏览器大战。H5真正的崛起,是因为它和Flash的区别。2010年4月,乔布斯发表了一篇题为《对Flash的思考》的文章,指出随着HTML5的发展,在观看视频或其他内容时,AdobeFlash将不再是必需的。同时,H5的WebWorker可以让JavaScript多线程运行,WebSocket可以实现前后台双工通信,WebGL可以打造Web3D网页游戏……在第二次浏览器大战中,各个浏览器厂商都瞄准了提高JavaScript的运行效率,支持HTML5的各种新特性,促进浏览器之间的良性竞争。直到2016年,Chrome占据了浏览器市场的半壁江山。一个小插曲是微软开发的免费开源编程语言TypeScript的诞生。它是JavaScript的超集,本质上为该语言添加了可选的静态类型和基于类的面向对象编程。并且在2012.10微软发布了TypeScript公开版。2009年,Ryan使用Chrome的V8引擎创建了一个基于事件循环的异步I/O框架——Node.js诞生了。Node的出现进一步扩展了前端的功能,前端正式进入服务器端。由于语言的特性,我们很难用一种语言来实现前后端开发。Node的出现扩展了js语言的特性,更重要的是构建了一个庞大的生态系统。使得js有称霸世界的潜力。2010年1月,NPM作为Node.js的包管理系统首次发布。我们可以按照CommonJS规范编写Node.js模块,然后发布到NPM上供其他开发者使用。Npm是世界上最大的包模块管理系统。Node有很多框架,包括Express、koa、Sails和egg。推荐egg,因为egg是阿里出品,文档完整详细,专为企业级应用设计。说到模块化,先简单说一下模块化的过程。模块化体现的两个特点是独立性和依赖性。早期我们使用脚本导入js模块,缺点是会污染全局变量。同时,一个通病是它的加载是顺序的,模块太多,不美观,资源难管理。.为了解决这个问题,commonJs规范诞生了。这个规范的核心思想是让模块通过require方法同步加载自己依赖的其他模块,然后通过exports或者module.exports导出需要暴露的接口。它的缺点是不能并行加载模块,会阻塞浏览器加载。AMD的诞生就是为了解决浏览器无法并行加载的问题。代表工具是requirejs,但是代码可读性较低。同时,CMD的出现给了开发者多了一个选择,其代表工具就是sea.js。与AMD相比,AMD主张靠前;CMD提倡就近依赖,只在使用到某个模块时才需要。AMD的API默认是一个,而CMD的API是严格区分的,推崇单一职责。对于依赖模块,提前执行AMD,延迟执行CMD。我们现在大多数人都使用ES6模块,而EcmaScript6标准在JavaScript语言级别添加了模块系统定义。ES6模块的设计思想是尽可能静态化,这样模块的依赖关系,以及输入输出变量都可以在编译时确定。CommonJS和AMD模块都只能在运行时确定这些东西。在ES6中,我们使用export关键字来导出模块,使用import关键字来引用模块。但是浏览器还没有完全兼容,需要使用babel进行转换。继上,随着H5的流行,之前只适用于后端的思路逐渐被前端采用。MV*框架的兴起,将前端从DOM操作直接推向了数据操作。这将是前端的又一次革命,如果说Ajax是前端的第一次革命,Node的出现是前端的第二次革命,那么这就是前端的第三次革命。Ajax将静态网页变成真正的“动态”,引领浏览器生态。Node把前端延伸到后端,让js充满了无限的想象空间。MV*框架的诞生,改写了前端的写法。现在前端面试,有哪些题,大家可以百度一下,现在的前端还是前端吗?还是前端?随着科技的兴起,我们进入了移动应用时代,网页也逐渐从WebSite演变成了WebApp。新兴的Web应用程序、混合应用程序、本机应用程序。现在大多数应用都是混合应用,既有原生功能,也有网页。前端逐渐开始涉及到App应用的开发。ReactNative可以使用js构建原生应用,大大节省了开发成本,同时也增加了前端的学习成本。前不久,谷歌开发大会谈到了用Flutter开发原生应用。Flutter是Google的移动UI框架,可以在iOS和Android上快速构建高质量的原生用户界面。小程序的出现也是对前端的挑战。微信小程序和支付宝小程序都依赖于巨大的流量池(平台)。前端的多样性也导致了前端的复杂性,那么问题来了,如何在多个终端使用一套代码呢?Taro是一套遵循React语法规范的多端开发解决方案。现在市面上的终端形式多种多样,流行的有Web、ReactNative、微信小程序等各种终端。当业务需求同时要求在不同终端上表现时,针对不同终端编写多套代码的成本显然非常高。这个时候,只用一套代码就可以适配多种终端的能力就显得极为必要了。Taro由JDO-ConvexLab开发。前端还可以开发桌面应用。Electron基于Chromium和Node.js。它是一个使用JavaScript、HTML和CSS等Web技术创建桌面原生应用程序的框架。Electron兼容Mac、Windows和Linux,它构建的应用程序可以在这三种操作系统上运行。2015年6月,ECMAScript6.0发布。此版本添加了许多新语法。ECMAScript未来每年都会发布一个新版本,这无疑将继续促使浏览器厂商不断地为JavaScript注入新的功能和特性,JavaScript正走上快速发展的正轨。现在的前端还是前端吗?随着技术的发展,前端开始涉及到全端,js也可以在全端自由运行,不断挖掘它的潜力。有朋友预测,未来只会有两种开发人员,一种是客户端开发工程师,一种是云开发工程师。技术的边界越来越模糊,“全栈工程师”、“架构师”等新的职业词汇不断涌现。作为一名前端开发者,要学习的东西很多,并不仅限于前端。最后一个问题,你真的学不会吗?
