# 页面优化
一个页面从输入 url
到最终呈现整个流程可以分为资源加载过程和页面渲染过程。优化页面时我们可以从这两个角度去思考得到一些性能调优的思路
# 加载过程
- DNS 预取:首先从地址栏输入一个
url
我们需要将url
地址解析,获取其中的主机地址,然后再对主机地址发送请求获取资源。这里我们先需要进行DNS
查询,而DNS
查询这个过程我们可以让浏览器进行DNS预取
加快查询,电脑主机会先从本机 DNS 缓存中查找域名映射,若没有则会默认进行DNS递归查询
。 - TCP preconnect:tcp 调优、HTTP/2、keep-alive
- http 缓存:让本地客户端缓存一些常用资源、from cache、from disk
- CND 加速:多地分布服务器资源
- 合并请求:如雪碧图、nignx 模块、SSR 服务端渲染
- 减小资源体积:减小 cookie 体积(为什么 cookie 才 4KB 容量)、图片压缩、gzip 压缩
- 文档加载:css 样式放在 html 文档头部,js 脚本放在 html 文档末尾、异步加载 js
# 渲染过程
- 合并 DOM 操作,减少 DOM 操作
- 尽早开始执行 js,用 DOMContentLoad
- 懒加载
- 对 DOM 查询进行缓存
- SSR 服务端渲染
- 使用防抖和节流
# 检测页面的内存泄漏
之前面试的时候被问到过这个问题,如何快速检测出页面存在内存泄露情况。当时完全懵了,不知道怎么样调试才能检测出。后来去网上搜找到了一篇文章讲的十分好,在此记录一下。How to find memory leaks in JavaScript