前端工程化简史

44 阅读8分钟

1. 原始社会

  • 1990年,以HTML为基础,诞生了最原始的Web浏览器
  • 1991年,美国国家超级计算应用中心(NCSA)推出了NCSA Mosaic浏览器
  • 1994年,万维网联盟(World Wide Web Constitution)成立,简称W3C

此阶段的特点:

  • 只有HTML文本语言,只支持静态页面,网页是只读的,信息流只能从服务端向客户端单向流动
  • 不区分前后端,浏览器渲染页面的过程是:后端收到浏览器请求 -> 发送静态页面 -> 发送到浏览器

2. 石器时代

  • 1994年, PHP诞生,开发人员可以将数据嵌入HTML

特点:

  • 视图渲染从后端模块中分离出来,具有一定的差异化渲染能力
  • 通过模版渲染数据的模式,在HTML中使用〈%--%〉标签嵌入服务端代码

3. 铁器时代

  • 1994年,CSS规范提出
  • 1995年,网景公司推出了JavaScript语言,并内置在Netscape Navigator浏览器中
  • 1996年,微软推出了JScript并内置于IE3浏览器中,它与JavaScript不兼容,IE开始抢夺Netscape Navigato的市场份额,“第一次浏览器战争”打响,在此期间,各种规范和技术呈现井喷式发展。
  • 1996年,JavaScript被提交到ECMA,进行国际标准化;W3C推出了CSS 1.0规范。至此,HTML描述页面结构、CSS描述页面样式、JavaScript响应用户交互的前端三大基石地位确定。
  • 1999年,微软推出用于异步数据传输的ActiveX,随后各大浏览器厂商也推出了XMLHttpRequest,也就是AJAX的雏形。它改变了前端页面必须刷新整个页面才能从后台获取数据的局面,前端页面可以通过AJAX自行拉取数据并进行渲染,前端向着动态页面发展。
  • 2002年,IE垄断了浏览器市场,随着”第一次浏览器战争“结束,浏览器的创新也随之减少。作为垄断者,IE并不遵循W3C的标准,它成为了事实的标准。
  • 2004年,Firefox浏览器发布并流行,挑战了IE的主导者地位,”第二次浏览器战争“爆发。
  • 2004年和2005年,Google推出了两款重量级的Web产品:Gmail和Google Map,它们大量使用了AJAX技术,革命性地颠覆了用户体验。随后越来越多网站使用AJAX技术,动态页面成为潮流。
  • 2006年,AJAX被W3C正式认定为前端开发的标准。从此,前端不再仅仅是后端的模板。

特点:

  • AJAX带来了重大技术突破:它使得前端摆脱了依赖后端模版渲染获取数据的局面。

  • 浏览器兼容性问题:随着各种浏览器阵营的对抗,浏览器碎片化问题越来越严重,不同的浏览器执行不同的标准。为了解决浏览器兼容性,出现了Dojo、jQuery、YUI等前端框架,其中jQuery凭借简单的使用方式和强大的兼容性广泛流行,大量基于jQuery的插件构成了一个庞大的生态系统。

4. 工业化时代

  • 1999年,W3C发布了HTML 4.0版本,随后几年,没有发布新的Web标准。旧的Web标准逐渐不能满足Web应用的快速发展需求
  • 2004年,浏览器厂商成立的WHATWG技术工作小组,推动技术规范的开发,直到2007年,HTML5被提出,并且被W3C接纳。
  • 2008年,Google发布了Chrome浏览器,加入了”第二次浏览器战争“。Chrome使用Safari开源的WebKit作为布局引擎,并研发了高效的JavaScript引擎V8。
  • 2009年,Node.js诞生,它利用Chrome V8引擎打造了基于事件循环的异步I/O框架。它使得用JavaScript编写服务端代码变得可行。
  • 2010年,NPM作为Node.js的包管理系统首次发布,前端开发人员可以按照CommonJS规范编写Node.js模块,然后发布到NPM上共享,大大促进了前端的生态繁荣和快速发展。
  • 2021年,微软发布了TypeScript语言,它扩展了JavaScript语法,添加了可选的静态类型和基于类的面向对象编程。它使得静态类型检测成为可能,为开发大型应用提供了质量和可维护性的支持。

特点:

  • HTML5提供了越来越多的新特性:比如Web Worker可以使JavaScript运行在多线程中;WebSocket可以实现前端和后台的全双工通信;WebGL可以创建Web3D网页游戏等等。随着HTML5的流行,很多桌面软件功能逐渐迁移到前端,前端的代码逻辑变得复杂。

  • 前端框架的演进:面对复杂页面,jQuery开始变得力不从心:jQuery基于DOM操作动态来改变页面,在复杂页面中的维护的复杂度大大增加。ECMAScript和JavaScript的发展也逐渐抹平了jQuery的浏览器兼容性优势。新的前端框架开始涌现,比如Angular、React、Vue等,随着这些框架的出现,网页逐渐从Web Site模式演变成Web App模式,最终体现为复杂的单页面应用(Single Page Application)。

  • Node.js带来了重大的技术突破:Node.js的发展使得JavaScript可以编写后台代码,拓宽了JavaScript在服务端的无限可能。在此之前,虽然JavaScript从诞生之初就能同时运行在前后端,但是受限于运行时环境和服务器端框架,它在服务端没有得到很好的发展。另外,Node.js大大地推动了前端模块化的发展,前端可以更好地构建大型复杂的页面应用。

  • 前端工程化概念出现:随着前端的各项功能被逐渐补全,前端工程化这一概念出现。它指的是使用软件工程的技术和方法将前端的开发流程、技术、工具、经验等规范化、标准化,提高开发过程的效率,减少不必要的工作。

  • 前端工程化打包工具出现:webpack、Rollup、Parcel等前端工程化打包工具出现,基于这些工具,开源社区衍生了一系列的插件生态,大大提升了前端工程化能力。

  • 跨平台生态发展:随着工程化质量和开发效率进一步提高后,前端不再局限于PC端网页,开始朝着各端发展。

    • 移动端:随着移动端的兴起,开发人员逐渐将Native App和移动Web开发结合起来,发展出Hybrid技术。即利用Web开发技术,调用Native相关的API,既能体现Web开发周期短的优势,又能为用户提供Native的体验。典型的解决方案包括React Native、Weex、Flutter等。
    • 桌面端:传统的桌面GUI应用程序受限于操作系统的依赖,难以跨平台。Electron通过将Chromium和Node.js合并到同一个运行环境,实现了可以基于前端技术构建的跨平台桌面应用程序,进一步延伸了前端的能力。
    • 小程序:随着微信小程序的流行,各大厂商也推出了自己的小程序标准。为了用同一套代码兼容多种小程序,像mpvue、Taro这样的框架也相继出现。

至此,前端生态系统已经形成了工程化的体系,各种工具可以有效保障前端的研发效率和质量。

5. 未来的方向:智能化

“前端智能化”是一种新的概念和技术,人工智能、大数据、云计算等技术以各种形式被应用到前端领域。

从交互层面看,传统前端依赖于键盘鼠标等设备在用户和页面之间传递信息。而未来可能会有更多样的交互方式,比如生物识别、自然语言交互等。

前端研发的成本主要用于页面实现和业务逻辑上。其中页面实现主要依赖于开发人员使用HTML+CSS进行UI稿的还原,这是一项琐碎的工作,而且还存在对细节还原不到位的问题。为了解决这个问题,一些将设计稿生成代码的工具出现了。比如pix2code,它将设计图和DSL描述经过深度神经网络进行训练,然后给出一张新图并通过推理得出新的DSL描述,再通过代码生成器得到目标平台上的代码。为了提升效率,降低成本,很多企业还探索了No Code和Low Code的技术方案,

总的来说,前端会朝着智能化发展,不断结合新技术,产生新的提效工具,将前端开发人员从繁琐的工作中解放出来,做更多有意义的研发和探索工作。