给产品经理讲技术
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

“直出”是什么

“直出”其实是“直接输出”的意思,讲的是在浏览器打开某个网页时,拿到的数据是服务器“直接输出”的,显示速度特别快,读者看到很多“秒开”的网页,很可能用了“直出”的技术。

作者先从打开某个网页的那一刻发生了什么讲起。举个例子,假如用户打开了手机腾讯网,浏览器首先会通过DNS查到这个网站的真实IP地址,然后向该IP地址发起HTTP的请求,请求拉取手机腾讯网的HTML页面。这时,用户的手机和腾讯网的服务器悄悄地进行了数次握手,最终达成一致,服务器开始向用户的手机传回HTML网页。

经过数个路由器和网关,HTML 网页终于拉取到了。但是这时浏览器还不能显示出这个网页,原因是网页上还有很多 CSS 资源(用来美化网页,控制字体、颜色等)需要拉取。于是浏览器找到写在HTML网页里的CSS资源地址,再次向服务器发起HTTP。

浏览器拉回CSS资源,发现还有JavaScript代码没有下载,于是又去网站上下载。为什么必须拉取JavaScript代码呢?因为现在很多网站的数据都是异步加载的,就像很多APP那样,先显示一个架子(由HTML描述),然后从后台请求数据(由JavaScript发起),拿到数据后再补充数据结果并渲染出来,于是浏览器又去拉取真正的数据。

当用户真正看到完整的网页时,时间已经过去好几秒。等待时间越长,用户越容易流失。后来,程序员想了个办法,那就是“直出”。

如果浏览器第一次请求HTML网页时,拿到的就是带有经过JavaScript渲染的数据的HTML,就省去了拉取JavaScript代码及数据的过程。虽然需要传输的数据量并没有大幅减少(实际上省去了每次 HTTP 请求的额外信息),但最关键的是减少了HTTP请求的次数,从而减少了浏览器与服务器之间握手、协商的次数。

总结一下:浏览器直接输出渲染好数据的HTML页面,简称“直出”。直出没什么神秘的,只不过需要Node.js的支持,服务器和前端都用JavaScript语言编写,相当于在服务器上也运行一个浏览器,它把渲染好的内容直接输出给客户端的浏览器。就好比小明从网上买计算机,先买主板,然后买 CPU、显示器,准备自己组装,发现要花好几百元运费。后来小明想通了,直接把配件都选好,让店家帮忙组装,一次性寄送,多省事啊。“直出”就是这个原理。