首先,我们默默想一下雅虎34条军规,这是前端面试中常问的项目,好了,第8条如下:
Make JavaScript and CSS External
将JS和CSS外链,一些较为公用的JS和CSS,我们可以使用外链的形式,譬如我就是从Google外链来的jQuery文件,如果我的浏览者在浏览别的使用了这个外链文件的网站时已经下载并缓存了这个文件,那么他在浏览我的网站的时候就不需要再进行下载了!
实际上,缓存是其中一个原因,还有另一个原因就是因为:http的管线化,也叫管道化,英文是HTTP Pipelining。管道化是指:客户端可以发送多次请求到服务端,而不需要等待上一次请求得到响应的时候才能进行下一次请求,这样就可以实现并发。在等待上一个请求响应的同时,发送下一个请求。HTTP Pipelining其实是把多个HTTP请求放到一个TCP连接中一一发送,因为http本质还是基于tcp的,而在发送过程中不需要等待服务器对前一个请求的响应;只不过,客户端还是要按照发送请求的顺序来接收响应。这也是管道的特点,而不会出现一个前面的请求被后面的请求覆盖的情况。
chrome默认一次可以发送6个http请求,如果使用内部的和标签,则会增大要下载的文件的大小,而且只能使用一个http链接来下载了。 wiki维基百科上有对http管线化的解释,详见https://en.wikipedia.org/wiki/HTTP_pipelining 目前大部分主流浏览器仍然默认关闭了http管线化的功能:
HTTP pipelining is a technique in which multiple HTTP requests are sent on a single TCP connection without waiting for the corresponding responses.
The technique was superseded by multiplexing via HTTP/2,[2] which is supported by most modern browsers.
As of 2018, HTTP pipelining is not enabled by default in modern browsers, due to several issues including buggy proxy servers and HOL blocking.