async 和 defer 的区别
- async:异步加载脚本,加载完之后立即执行(回调的方式)
- defer:异步加载脚本,在 DOM 解析完之后执行
节流/防抖
-
节流:在某一时间段内只执行一次
var throttle = function(func, delay) {
var prev = Date.now();
return function() {
var context = this;
var args = arguments;
var now = Date.now();
if (now - prev >= delay) {
func.apply(context, args);
prev = Date.now();
}
}
} -
防抖:在 n 秒后执行函数,如果期间又有触发,则重新计时,即只执行最后一次
function debounce(fn, wait) {
var timeout = null;
return function() {
if(timeout !== null)
clearTimeout(timeout);
timeout = setTimeout(fn, wait);
}
}
visibility:hidden 和 display:none 的区别
- visibility 为 hidden:让一个元素不可见,但没有消除 DOM 元素,所以元素依然占用位置
- display 为 none:从 DOM 中删除元素
Http/2
HTTP 1.x 中,如果想并发多个请求,必须使用多个 TCP 链接(不能并发),且浏览器为了控制资源,还会对单个域名有 6-8个的TCP链接请求限制
- 多路复用:许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息
- 如何实现多路复用:二进制分帧
- 二进制分帧:将 http/1.1 请求二进制编码,分割为帧:首部信息会被封装到 HEADER frame,而相应的 Request Body 则封装到 DATA frame 里面
- 首部压缩:http/2 压缩 headers 算法:HPACK
- 服务端推送:
LocalStorage 设置超时时间
将超时时间 expire 和设置时间 startTime 也存入 localStorage 中,在 getItem 时,通过比较当前时间 Date.now 和 expire 和 startTime 确定返回空还是值,返回空代表超时
promise 与 async await 的区别
tcp/udp
upd:没有建立连接,在应用程序的报文上加 只有 8 个字节的头信息(包括源端口、目的端口、长度、检验和),然后就交给 ip 层
tcp 三次握手:
- 客户端发起询问:可以吗?
- 服务端确认:可以!
- 客服端收到回复后,发出确认是否同步的报文:为了防止失效的连接请求到达服务器,让服务器错误打开连接
tcp 四处挥手:
- 客户端发起关闭报文:我要关闭从我到你方向的链接了
- 服务端确认:好的,我知道了;(稍后我也会关闭到你方向的链接,现在我想向你传输的数据还没有传完)
- 服务端发起关闭报文:我要关闭向你方向的链接了
- 客户端回复:好的,我知道了
TCP连接是双向传输的对等的模式,就是说双方都可以同时向对方发送和接收数据