第1章 引 言
早期的HTML作为静态文件,即使只有部分内容是需要变动的,那么有多少种变动
的可能性,就需要准备多少份文档,这对***来说是非常不友好的,并且无法与用户
进行交互。
CGI(Common Gateway Interface)的出现改善了这一情况。CGI作为服务器拓展功
能,可以从数据库或者文件系统获取数据,在将数据渲染为HTML文档后,返回至客户
端,从而实现了网页的动态生成。在接收到用户请求后,CGI还可以在服务端进行处理,
并返回对应的处理结果,如图1.2所示。
图1.2 动态网页渲染流程
CGI被广泛认为是服务端脚本语言的鼻祖。然而,它也有着非常致命的缺陷。首先,
CGI每接收到一个请求,都会新开一个进程进行处理,占用服务器的CPU和内存,当请
求量成千上万时,服务器可能无法支撑以致崩溃。其次,黑客很容易通过不完善的CGI
程序非法进入***的服务器系统,这从**方面来考虑是**不允许的。
以后来人的角度来看,笔者认为CGI出现的*大意义就是给当时刚起步的Web提供
了一个发展方向。在这之后,PHP、JSP、ASP等各种服务端语言层出不穷,不仅弥补了
CGI的缺陷,而且在性能上愈加**,在开发上愈加简捷。这些语言的出现和广泛应用,
使得Web技术飞速发展,前端网页从此从静态走向动态,这个时代被称为Web 1.0时代。
1.1.2 从后端走向前端
在 Web 1.0 时代,前后端是如何协作的呢?由于网页是在服务端使用动态脚本语言
和模板引擎渲染出来的,所以一般由前端先写模板,写好后交付给后端套用,之后再由
前后端联调,以确认模板套用无误。
在这种开发环境下,前后端耦合密切,项目开发需要很高的沟通成本。在模板引擎
的变量、判断和循环、宏区块等语法糖的支持下,前端也可以拿到环境变量来实现部分
004
Vue. js从入门到项目实战
业务逻辑。如果前端***表现得稍微弱势一些,就很有可能被后台摁着在视图层实现
一些业务代码。同时,整个项目的代码质量也随之降低。
网站的这种组织架构还会带来另外一些问题。比如,页面哪怕仅有一小块内容需要
变更,浏览器也需要重新请求和渲染整个页面。一方面,网站资源的传输耗费了更多的
时间;另一方面,页面重载的用户体验也十分糟糕。
举个例子,用户在登录页面输入了错误密码时,服务器要将校验信息渲染到页面并
传给浏览器。实际上,页面只是多了一行类似于“密码错误”的提示,然而网站资源却
需要重新进行传输,同时页面还会丢失用户输入的表单数据(即便到了今天,这种现象
依然可以在一些政府和国企的老旧网站中看到)。
当时虽然出现了各种页面和数据的缓存技术,稍有成效地缓解了这一问题,但也无
法从根本上解决问题。于是,从事Web的前辈们开始探寻其他一些解决方案,如Ajax
异步数据加载。
Ajax(Asynchronous JavaScript And XML,异步JavaScript和XML)通过XMLHttpRequest
对象,可以在不重载页面的情况下与Web服务器交换数据,再加上JavaScript的document
对象,***们可以很轻松地实现页面局部内容刷新。
从1999年开始,ActiveX和XMLHttpRequest陆续问世,Ajax的星星之火渐渐燃起。
时间推移到2005年,互联网巨头Google发布了全面使用Ajax打造的Gmail(如图1.3所示)
和Gmap两款应用。人们惊讶地发现,原来使用异步数据传输获得的应用体验是如此地
良好。自此,Ajax获得了井喷式的发展。