加载页面
简单版:
- 浏览器根据DNS服务器得到ip
- 向ip发送http请求
- 服务器收到处理返回http请求
- 浏览器获得内容
具体细节在 browser-render 里
渲染过程
简单版:
- 根据html生成 DOM 树
- 根据css生成 CSSOM
- 将DOM和CSSOM整合成 RenderTree
- 根据 RenderTree 开始渲染和展示
- 遇到 script 执行并阻塞渲染
更多细节在 browser-render 里
性能优化
优化原则和方向
- 多使用内存 缓存 和其他方法
- 减少 cpu gpu计算
因此,方向: 减少页面体积,提升网络加载;优化页面渲染
减少页面体积,提升网络加载
- 压缩合并 css js 图片
- 缓存,md5文件名
- cdn
优化网页渲染
- css前,js后
- 懒加载
- 减少dom查询
- 减少dom操作,多个操作合并 documentFragment
- 事件节流
- 尽早执行 DOMContentLoaded
- ssr
- 后台ssr渲染
优化图片
- 压缩图片
- 使用css替代图片
- 拿空间换时间,图片多裁切,js先计算宽度,再发请求对应的尺寸
- 小图片用base64
- 合并图片
- 正确选择格式
- 懒加载
节流
throttle
滚动触发的次数太多
其实就是不断 setInterval 计算距离上次的时间,够时间了才触发
防抖
多次点击按钮,百度输入按键智能搜索
核心是 setTimeout 不断清计时器,然后添加新的。
时间不到永远不触发。
dns预解析
link rel=dns-prefetch href=xxx.cn
预加载
link rel=preload href=a.html
现在暂时不用,但希望尽快获取
兼容性。
预渲染
link rel=prerender href=a.html
小说的下一页,极大概率会点击。