1.1 附属的时代
1990 年诞生了世界上的第一款浏览器,HTML 作为超文本标记语言被用于在网页中展示文字,但此时的 HTML 仅仅是实验室产品。1994 年,网景公司成立并开发了一款名为 Navigator 的浏览器,这款浏览器进入市场后迅速得到了大众认可,HTML 技术得到了推广。
Navigator 浏览器诞生后,CSS、HTML2 和 W3C 联盟相继出现。CSS 誓要给枯燥的图文世界带来一些色彩;W3C 联盟则作为 Web 技术的官方代表,致力于制定 Web 技术标准,要求浏览器厂商按照统一标准来实现。
这里提到的 Web 是万维网(World Wide Web)的统称,W3C 就是万维网联盟。Web 属于互联网的一个子类,需要依赖浏览器访问和展示信息。把围绕浏览器产生的相关技术统称为 Web 技术。因此,HTML 和 CSS 都属于 Web 技术范畴。
此时的浏览器网页以 HTML 为主,是纯静态的网页,并且是“只读”的。用户只能被动接收信息,没有变化也没有交互,因此将这个时代称为 Web 1.0 时代。
随着网页交互要求的提高,1995 年,网景公司的工程师 BrendanEich 花了 10 天的时间设计了 JavaScript(简称 JS)语言,并将其内嵌到浏览器中。JavaScript 提供了操作 HTML 的功能,这使得一成不变的网页有了“动起来”的可能。
在此期间,微软公司开发出了另一款浏览器 —— IE 浏览器。JavaScript 出现后微软公司又开发了一款脚本语言 JScript 嵌入 IE 浏览器中。因为两家公司的脚本实现存在差异,所以一个网页不能同时在两款浏览器中运行,这就迫使网站不得不“二选一”,直接引发了第一次浏览器大战。
这次大战推动了浏览器的创新和升级。最终的结果是 IE 浏览器战胜 Navigator 浏览器,并且占据了 96% 的市场份额。不过网景公司为了确保 JavaScript 的市场领导地位,已经率先将其提交到 ECMA 进行标准化。
随后 ECMA 以 JavaScript 为基础制定了 ECMAScript 1.0 标准规范(目前已经更新到 ES6+)。这也是网景公司战败但是 JavaScript 还能继续发展的原因。
至此,Web 领域由 W3C 和 ECMA 两大标准组织推进,Web 开始了快速发展。
1.1.1 前端的诞生
在 Web 1.0 时代,网页是纯静态的,并没有前端和后端之分。随着以 ASP、JSP 和 PHP 为代表的动态页面技术的诞生,网站能够从数据库中获取数据并展示出来,因此网站开发逐渐被划分为前端和后端两个方向。
后端开发的主要任务是编写业务逻辑和处理数据;前端开发的工作相对来说比较简单,主要是对文字、图片做排版和样式修饰,并没有非常复杂的交互。
以 PHP 为例,网站代码被嵌在一个 MVC 框架中。MVC 即模型(Modal)、视图(View)和控制器(Controller),其中视图部分代表 HTML 页面。前端开发者将静态页面交给后端开发者,后端开发者将其修改为 PHP 模板放到框架中。此时的前端只是 PHP 的一部分。
正因为如此,前端给人们的固有印象就是技术难度小、门槛低。前端开发者也被戏称为“页面仔”,长期处于技术鄙视链的底端。
随着互联网的快速发展,Web 应用的体量越来越大,前端和后端的代码揉在一块的弊端越来越明显 —— 高耦合、互相影响、难以分模块,共同调试和维护一套代码变得越来越困难。
于是前端的需求高涨,企业需要能解决复杂问题和实现复杂功能的专业的前端工程师。在这个背景下前端从业者明显增加,前端进入了增长期。
随着 HTML 5 的出现,移动互联网逐渐成为潮流,手机的硬件和性能也越来越好。用户使用手机不再只看图文,而是希望在手机上通过滑动手指就能完成任何事情。于是有了购物、视频、游戏等 App,这些变化推动前端进入爆发期。
尽管如此,前端依然离不开后端,并且是后端项目的一部分。前端页面需要动态数据,因此不管开发了什么功能,最后一步还是要交给后端工程师完成,把页面套在他们的模板中。
1.1.2 jQuery 实现交互
在 Web 1.0 时代,前端的“技术性”体现在 jQuery 上。
在一些交互比较复杂的页面中,需要大量操作 DOM 来实现功能。如果需要修改某个层级比较深的元素,就需要层层寻找,甚至还要遍历。原生的 JavaScript DOM API 因为以下两方面的原因使用效率很低。
- 不同浏览器的 API 存在兼容性。
- 原生 API 使用烦琐,没有“链式”和“批量”这样的快捷操作。
在这种情况下,前端迫切需要一种统一、使用简单、操作效率更高的方式来代替原生 API。此时 jQuery 登场了。
没有经历过早期前端开发的程序员难以体会 jQuery 的出现带来的巨大的便利。在没有 jQuery 时,操作 DOM 全靠原生 API,因为没有其他的方式。因为大家都采用这种形式,所以也不觉得效率低,好像本就该如此。
jQuery 带来了极简 API,相信使用过的人都会惊呼:怎么能这么简单!
使用 jQuery 操作 DOM 的效率比使用原生 API 操作 DOM 的效率至少提高了 1 倍。这并不是 jQuery 创造了一个代替原生 API 的东西,而是将原生 API 包装起来,采用一种更简单、直观的方式实现调用。特别是 jQuery 提供的链式调用和批量操作,不仅简单直观,还容易理解,所以前端开发者不愿意再用原生 API 操作 DOM。
jQuery 最强大的功能还是插件系统 —— 可以将一个功能模块封装成插件以供复用。
jQuery 的插件生态非常丰富。在有的网站上可以找到一些常用的组件(如日历、轮播图、弹框、各种动画、特效),这些是全球开发者共同的心血,可以完全免费使用,因此大大提高了开发效率。
jQuery 插件算是最早意义上的组件化 —— 无数的物料以 jQuery 插件的形式在全世界分享。对于此时的前端而言,这是 jQuery 的时代。