线程
JS线程
- JS引擎主线程
- 阻塞UI线程
- longtask:执行时间超过50ms
UI线程
- DOM线程
- CSS线程
- Layout线程
- Render线程
- Compositor线程
worker线程
- HTTP请求线程
- 事件处理线程
- 定时器线程
- 文件操作线程
- web worker
缓存
强缓存
- expires(http1.0) 绝对时间
- cache-control(http1.1)
- no-cache 不使用本地缓存,使用协商缓存
- no-store 禁止浏览器缓存
- public 可以被客户端和中间CDN缓存
- private 只能被客户端缓存,CDN不能缓存
协商缓存
- last-modified & if-modified-since
- Etag & if-none-match
如何缓存
- service worker
- page cache
- 缓存页面快照
- 快速前进后退
- memory cache 访问后,刷新页面会访问memory cache
- disk cache 访问后页面关闭,下次访问会在disk cache
http
1.0
- 短连接
1.1
- 默认使用长连接(keep-alive)
- 支持只发送header信息
- 当服务器返回100之后,才开始把请求body发送到服务器
- 当服务器返回401之后,客户端就可以不用发送
- 管线化(同时发送多个请求,同时处理多个响应)
2.0
- 二进制分帧
- 多路复用
- 头部压缩
- 服务端推送
性能与体验指标
performance.timing API
- DNS时间 domainLookupedEnd-domainLookupStart
- TCP时间 contentEnd-connectStart
- FTTB首字节 responseEnd-responseStart
- DOM load时间 DOMContentload-navigationStart
- onLoad loadEvent-navigationEnd
安全
XSS攻击
- DOM Based XSS漏洞
- 讲url参数直接展示
- Store XSS漏洞
- 将存储的数据直接展示
- 防御
- 不要相信用户输入
- Html encode
- CSP(内容安全策略)
CSRF
- 服务端
- Cookie Hashing
- 验证码
- One-Time Tokens
- anti-csrf-token
- 服务端设置set-cookie,把该随机数作为cookie或者session种入用户浏览器
- 用户发送GET或者POST请求时带上_csrf_token参数
- 服务端对比cookie里面的_csrf_token的值与参数中_csrf_token的值是否一致
jsonp劫持
- 属于CSRF一种
- A站某个接口支持jsonp,B站通过script伪造请求,拿到jsonp结果
- 防御同csrf