首先dns这个属于很久以前在计算机网络谢希仁版看到过了,有一些细节忘了,但是大致流程是记得的。比如说查询一个网址为:www.baidu.com
1、器中输入https://www.baidu.com 域名,操作系统会先查hosts件是否有记录,有的话就会把相对应映射的IP返回。
2、hosts文件没有就去查本地dns解析器有没有缓存。(这个我没答上来)
3、然后就去找我们计算机上配置的dns服务器上有或者有缓存,就返回
4、还没有的话就去找根DNS服务器(全球13台,固定ip地址),然后判断.com域名是哪个服务器管理,如果无法解析,就查找.baidu.com服务器是否能解析,直到查到www.baidu.com的IP地址
注:后面查资料才发现dns查询有两种模式,一种是转发模式,一种是非转发模式,我上面说的4是非转发模式。
前端的dns优化,可以在html页面头部写入dns缓存地址,比如
<meta http-equiv="x-dns-prefetch-control" content="on" />
<link rel="dns-prefetch" href="http://bdimg.share.baidu.com" />
终于抗过了第一轮的猛问,接着我继续说从浏览器地址栏输入url到请求返回发生了什么
查找到IP之后,就是http协议的三次握手(以及后面会涉及到四次分手)
我刚恢复节奏,准备侃侃而谈,修福报的大佬再次打断了我,说三次握手,为啥两次不行,顺便说一下3次握手发生了什么。
我去,大意了,没有闪,这是不是说我每说一句都要夹杂着各种问题,太难了啊!!!
没有办法,继续回答大佬,我说我先回答三次握手发生的事情吧,简答来说:
接着补上小问题为什么两次握手不行,因为第二次握手,主机B还不能确认主机A已经收到确认请求,也是说B认为建立好连接,开始发数据了,结果发出去的包一直A都没收到,那攻击B就很容易了,我专门发包不接收,服务器很容易就挂了。
我一听,好嘛,这不是计算机网络的知识吗,幸亏之前看过书,但也是好久以前看过了,只能凭借自己的理解解答了。
大佬让我继续,我就接着3次握手之后接着说道,建立完链接,就该请求html文件了,如果html文件在缓存里面浏览器直接返回,如果没有,就去后台拿
刚说到缓存,立马就有一种不详的预感,果不其然大佬先让把缓存解释一下。缓存这种问烂的问题,本以为能轻松应对,结果还是被问了个满头包。。。。
我说的大概意思是:
果不其然,大佬问了一些缓存不常问的,首先就是问我知道什么是from disk cache和from memory cache吗,什么时候会触发?
1、先查找内存,如果内存中存在,从内存中加载;
2、如果内存中未查找到,选择硬盘获取,如果硬盘中有,从硬盘中加载;
3、如果硬盘中未查找到,那就进行网络请求;
4、加载到的资源缓存到硬盘和内存;
接着大佬又问知道什么是启发式缓存吗,在什么条件下触发?
这个问题给我的感觉就两个字,懵逼!然后如实回答不知道。(查了下资料大概如下)
启发式缓存:
如果响应中未显示Expires,Cache-Control:max-age或Cache-Control:s-maxage,并且响应中不包含其他有关缓存的限制,缓存可以使用启发式方法计算新鲜度寿命。通常会根据响应头中的2个时间字段 Date 减去 Last-Modified 值的 10% 作为缓存时间。
// Date 减去 Last-Modified 值的 10% 作为缓存时间。
// Date:创建报文的日期时间, Last-Modified 服务器声明文档最后被修改时间
response_is_fresh = max(0,(Date - Last-Modified)) % 10
接着回答,我说返回html之后,会解析html,这部分知识我提前准备过,但是答的不是很详细,大概意思就是cssom + domTree = html,然后布局和绘制
接着面试官问我一些页面渲染层的一些优化手段,大概如下:
页面渲染优化
最后面试官问我,如何诊断页面渲染时各个性能指标,我大概说了,通过chrome浏览器的工具,比如看网络请求情况的network,还有看页面渲染情况的perfermance,以后有机会自己总结一篇。
本文分享自微信公众号 - web前端学习圈(web-xxq)。
如有侵权,请联系 [email protected] 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。