浏览器
浏览器缓存
MEMORY CACHE | DISK CACHE
memory cache 与 disk cache 的区别:
- memory cache 更快
- memory cache 会随着浏览器关闭而回收,disk cache 不会
200 -> response -> 关闭浏览器 -> 请求相同地址 -> disk cache -> 刷新 -> memory cache
浏览器帧率
从一个像素渲染到页面的全过程。
回流与重绘
css树和dom树,合并生成渲染树。
发生回流必发生重绘。
垃圾回收
算法有哪几种?分别原理是什么?
- 引用计数:通过计算变量被引用的次数确实是否进行垃圾回收。缺点是当出现循环引用时,无法清除;另外就是有时间开销,要不停监控对象。优点是速度快,发现后立即回收。
- 标记清除:执行过程分两次,第一次确定变量是否被引用并标记,第二次将未被引用的变量回收并清除标记。缺点是执行两次,回收过程程序终止执行;产生内存碎片;。优点是可以识别循环引用
- 标记实现:标记清除的基础上增加了对碎片空间的整理,将碎片移动并合并成一个连续空间
为了减少GC可以做那些优化?
如何通过 performance 监控浏览器?
如何通过 timeline 找到频繁垃圾回收,减少阻塞?
计算机 缓存
协商缓存与强缓存
强缓存是指,不直接从服务器中获取数据,直接从缓存中获取,通常是通过服务端设置 http 头实现。
协商缓存是指,服务器与客户端通过标识确定是否从缓存还是服务器中获取资源。
http
http1.1 比 http1 多了 E-Tag,用于协商缓存的字段
http2 多了二进制传输,流媒体之类
http 工作流程
ps. TCP 三次握手:C - 你在吗?-> S - 我在 -> C - 知道了-> S非简单请求比简单请求多了“预检”
OPTION
,响应“预检请求”后才开始正式通信。简单请求:POST, GET, HEAD
非简单其你去:
- DELETE,PATH,PUT
- 发送 json 数据。
- 自定义头部字段
http 存在的性能障碍主要是两个点:带宽与延迟。带宽目前通过硬件提升,延迟又分为3种,浏览器阻塞、DNS 查询、建立连接。浏览器阻塞通常是因为浏览器会限制最大连接数,DNS 是查询过程消耗的时间,建立连接,通常是 http 协议在 TCP 中经过3次握手 4次挥手。
http1.0 时代,1996年,主要是处理简单的html页面
http1.1 时代,1999年,增加了 css 与 js 文件,为了加快网站的加载速度
- 缓存策略,头增加了 Expire,If-Modified-sice
- 扩充了错误状态码
- 为了适配主机使用虚拟机时,会公用一个 IP,所以增加了 Host 字段。在 http1.1中,请求和响应都要增加该字段。
- 增加了长连接,Connect: keep-alive,在一个长连接下,不用重复建立连接和关闭连接的消耗。
- header 压缩
C -hash支持 ->S
S -公钥加密的认证->C
C 验证认证
C -对称加密(RSA)加密文本和公钥 -> S
http2.0 时代,基于谷歌剔除的SPDY方案做了升级
- 传输用二进制,而不是 http1.* 时的文本
- 支持服务端的 push
- 多路复用:在一个连接中,即可实现并行,而不是原来有序阻塞。通过将对二进制数据帧进行顺序标识,客户端接收到的数据进行合并,而不会出现错位。因为一个连接即可完成,所以对服务器来说相当于增加了并发量(原来需要发4个连接,现在一个连接能达到4个连接的效果)。
- 丰富缓存类型:协商缓存
- header 压缩
原理:类似于http 需要握手,但是不同的是具有持久的链接
头有 upgrade 标识 websocket 通信
跨域
有哪些不用的考虑跨域?
script, link,img src 这种不需要考虑跨域
跨域的解决方案?
- nginx
- cors
- jsonp 需要后端和前端协商回调函数名
常见的攻击与阻止有哪些?
CSRF
待补充
XSS
待补充
source-map
源码解析
中间人攻击
待补充
从浏览器输入URL到返回页面的过程
【前端面试资料整理【相关知识篇】】参考
推荐阅读
- 小程序|小程序云开发从入门到上线看这一篇就够了
- 事件循环机制(Event loop)宏任务(macro-task)微任务(micro-task)。
- nodejs|electron打开系统默认浏览器
- 案例分享|一键式自动监测,跨境电商平台的业务转型模板
- 前端周刊(2022-6 期)
- 《从零搭建开发脚手架》|从零搭建开发脚手架 细说权限管理ACL RBAC 按钮 接口 数据权限等
- 三维拓扑元素介绍之TLink
- 长列表渲染优化—虚拟列表
- 前端学习|vue3.0 实现旋转木马