深度探索Vue.js:原理剖析与实战应用
上QQ阅读APP看书,第一时间看更新

第1章 Web前端技术架构及Vue框架

1.1 Web前端技术架构发展历程

从互联网技术出现开始Web技术便进入了萌芽期。在2000年初期,家用计算机的逐渐普及推动了全球互联网的建设。随着互联网用户的大量增长,各个行业的IT技术得到了极大的推动。本章以Web前端技术的发展历程为核心介绍互联网技术的发展历程。

1.起航阶段

1990年WWW(World Wide Web)诞生,从此互联网的根基奠定,来自地球上不同位置的计算机连接到一起成为可能。1993年NCSA研发了第1个浏览器:Mosaic,它可以窗口浏览网页,再之后网景、IE、火狐等浏览器相继诞生。1994年W3C理事会成立,为Web前端开发成立了标准化组织。1995年JavaScript语言诞生,将网页制作推向了更高的层次。

从1990年到1995年,短短五年时间,从WWW的出现到JavaScript的时代就完成了初期阶段,这也意味着之后的Web技术发展速度被抬到更高的高度。

2.群雄割据

群雄割据时期的浏览器五花八门,互相竞争激烈。IE浏览器、网景浏览器、火狐浏览器、谷歌浏览器是这个时期的主角。这个时代便以各大浏览器厂商的战争拉开了序幕。

虽然当时已经有了比较统一的ECMA(JavaScript规范文档)标准和W3C(HTML、CSS规范文档),但是浏览器先于标准在市场上流行,成为事实标准。所以这就导致了我们现在在开发项目时还要去处理一些浏览器兼容性问题(大家最常遇到的是IE兼容问题)。

随着1998年Ajax的出现,前端开发从Web 1.0升级到了Web 2.0,从纯内容的静态页面,发展到了动态网页、富交互、前端数据处理的新时期。在这一时期,比较知名的两个富交互动态的浏览器产品是Gmail(2004年)和Google地图(2005年)。

由于动态交互、数据交互的需求增多,还衍生出了JQuery(2006年)这种跨浏览器的JS工具库,主要用于DOM操作和数据交互。

这个时代如三国时期,群雄割据,各占一方。虽然各自整体上遵循标准化组织的实现,但是为了占有更大的市场份额各大浏览器厂商仍然会推出浏览器自有的特色功能,所以这个时期的前端开发领域异常混乱,开发者的工作量也很大。

3.一统天下

由于群雄割据的时代让Web前端开发领域陷入了空前的兼容性危机,JQuery的出现解决了这个核心问题,并且JQuery框架利用优雅的语法封装了大量的复杂操作的API,为浏览器页面开发带来了极大的便利。种种优势使JQuery在浏览器厂商的竞争中走向了另一个层面的顶点。为了快速和稳定地开发网页并支持主流的浏览器厂商,当时绝大多数的IT公司会使用JQuery框架来做网页的构建。它的出现也促进了ECMA标准的进一步更新。

4.多媒体技术的诞生

在网页技术发展的初期Web页面以文字、表格、图片等元素为核心,以展示信息为主。访问互联网的用户大多以搜索信息为主。当Flash多媒体技术诞生后,Web页面的发展便进入了一个新的篇章。

通过对浏览器植入Flash插件,开发者可以通过Flash制作工具及编程的方式在网页中实现可交互的图形页面,这就衍生了大量的Web应用。这个时代在网页中可以通过Flash插件解析动画、游戏,甚至后期出现了3D渲染技术。让本来枯燥的Web浏览器页面,变得生动并有丰富的功能。通过Flash技术的推动,大量桌面程序便不需要在用户的计算机上安装,用户只需打开浏览器便可以实现各种只有本地应用程序才有的功能。

但是Flash技术存在技术瓶颈,由于它过度地占用CPU,使在Flash时代一旦运行了包含Flash元素的网页,就会让计算机的CPU风扇飞速运转,经常会有计算机因扛不住CPU的高温而触发自动断电保护功能。

5.动态网页时代

随着Web交互技术的升级,计算机的硬件能力提升,加上家用计算机的大量普及,接入互联网的设备和用户越来越多,网民对互联网上的资源使用需求变得更大。这就意味着仅仅靠HTML内部展示的内容并不足以满足互联网用户的浏览需求和操作需求。

伴随服务器端技术的高速发展,一个网站再也不是仅有几个HTML页面的企业站或者黄页的显示面板了。动态网页技术的出现让Web网页变成了真正的Web应用系统。通过JavaScript的交互能力加上服务器的动态解析能力,用户访问的网页变成了先访问Web服务器中间件,通过服务器访问数据库,在中间件上处理数据,并通过动态网页引擎将用户需要的数据动态解析,最后返回浏览器中。

这个时代用户可以直接通过网页操作有身份验证的管理系统,在系统中操作在线的数据。实现数据的录入、存储、读取、删除等操作,并且通过数据库技术的数据关系管理,实现在一个网站中管理公司的业务信息、学校的教务信息等,并且将数据存储在线上。这个技术的出现也促进了PC的去本地应用化,用户不需要安装大量的桌面程序来进入不同的管理系统。在开发层面,开发者也不再需要针对不同的操作系统,构建不同的客户端。这种双向有利的发展,让浏览器变成了所有接入互联网用户都必须安装的应用。从某种意义上讲浏览器在这个时代也成为建立在操作系统之上的“操作系统”。这也对先进的云技术发展起到了铺垫作用。

6.HTML5时代

在浏览器及多种技术的继续发展中,之前的阶段已经让Web开发进入了一个稳定期,但是这个阶段还是存在各个层面的问题,初期主要体现在多媒体方面。在2010年后家用计算机从普及变成了家庭必需品,每个家庭至少会有一台家用计算机。随着智能设备的兴起,除家用计算机外,智能手机和智能移动设备的出现,让互联网设备的接入量逐年呈现指数级别的增长。用户及接入互联网设备的快速增长,使现有互联网应用面临了巨大访问量的问题。基于这些问题,Web开发领域必须从用户页面的解析,到数据的传输速度进行全方位的升级和优化。

2010年后国内的互联网用户量巨大,并且对网页的访问需求也不仅是简单的交互和功能实现,这样在视图解析方面产生了极大的冲击。如果利用Flash技术在网页中实现大量的交互和动画,在这个时代也是极其消耗CPU资源的。为了解决这个问题,HTML5在2008年问世,从HTML5初期到现在浏览器实现了翻天覆地的变化,这个过程中最典型的案例就是浏览器的去Flash化。基于Flash的诟病,HTML5标准为浏览器增加了音视频解决方案。SVG绘图技术和Canvas绘图技术,让本来需要使用Flash实现的功能可以直接通过Web浏览器自带的API实现,为实现浏览器直接操作GPU进行图形渲染提供了解决方案。这样可以把大量的矩阵运算应用到显卡中操作,保证网页带来的复杂图形处理也不会使CPU经常100%地运行。除了这些变化,HTML5技术还提供了CSS3标准,让界面的样式交互变得更加平滑和细腻。后期的HTML5技术实现了网页的流媒体播放,以及即时音视频传输的解决方案。不仅实现了去Flash化和去桌面应用化,还实现了去移动应用化。HTML5技术发展至今几乎可以实现设备中只要接入网络并安装了浏览器,就可以仅通过互联网的Web页面实现绝大多数本地应用能实现的功能。

再从数据交互角度分析,过去以MVC为核心的服务器端应用,虽然利用动态网页技术可实现Web系统的构建,但是指数级增长的网民数量,让服务器端出现了大量访问危机。在动态网页技术下,用户想要打开网站页面,必须先访问服务器中间件的Controller部分,再通过数据库的连接对象访问数据,最后从中间件上处理数据结果并利用动态网页引擎将生成的HTML代码返回浏览器。随着用户的访问量增大,这样的操作会在大量用户同时访问网站时,因为第一批用户的视图资源没有计算完毕,导致后续访问网站的用户出现等待时间过长或连接超时的问题。这个问题最典型的体现在早期的电商网站和12306网站上,在旺季时这些网站的用户会出现无法访问的现象。针对这个情况服务器端采用了分布式部署的解决方案,由此前端架构也伴随着发生了极大的变化。

7.前后分离架构的出现

鉴于访问数量带来的压力,仅服务器端自己升级只能解决一半问题。因为分布式技术出现后,虽然可以通过分流技术来降低服务器的压力,但是巨大的服务器使用量让Web应用的运营成本大大提升,所以随之而来的新技术——“前后分离架构”出现了。

前后分离架构主要是鉴于动态网页的弊端,每次访问动态网页时在数据库操作、中间件处理没有完成前,不会生成一个实体的网页访问资源,这段时间会导致用户必须等待,并且这些处理操作和网页代码的生成等操作,也都由服务器来处理。当只有少量的人员访问服务器时,它还处理得过来。当有海量的用户同时访问时,服务器必须对每个请求都进行网页的生成。浏览器仅仅用于解析网页结果。到这里会发现服务器的工作量太大,而客户端的性能却过剩,所以前后分离架构主要解决这个问题。

前后分离架构思想要求,用户在访问网站时不直接访问服务器中间件的Controller,而是访问静态资源服务器中的HTML脚本文件,这样用户就可以直接从服务器获取网页内容。在加载网页的过程中通过JavaScript调用Ajax技术,将网页要动态展示的数据从服务器中间件中获取。在这个过程中服务器只需访问数据库或缓存,得到视图层需要的数据并返回数据本身。浏览器页面得到数据后在客户端通过JavaScript操作DOM进行页面的渲染。

这个思想的实现,让服务器不再需要针对每个访问,执行动态网页引擎生成HTML代码的步骤,这样可以直接将服务器的吞吐量提升数倍。将视图渲染交给客户端处理,可以让相同数量的服务器,比MVC技术的服务器大大提升吞吐量。直接访问静态资源,用户也不需要等待连接数据库的时间,就可以先将部分网页打开,再逐步实现动态数据展示。这样让两端工作量均衡,降低成本和服务器压力后,也提升了用户体验。

前后分离架构出现后,便成为现在主流的Web开发架构,这个架构的出现也促进了Web页面开发的进步。

由于渲染视图的工作全部交给浏览器处理,使用JQuery等DOM框架会让网页在前后分离架构运行时产生大量的DOM操作,极端状态下会出现渲染卡顿的情况。鉴于该问题,基于虚拟DOM操作的前端框架应运而生,新的前端时代到来。其中典型的框架包括React、Angular及Vue框架。