一、最核心一点,减少http请求,3次握手,冷启动,成本昂贵
- 合并小js文件
- 使用雪碧图
- 小图转换成base64放到代码里
- 设置缓存
二、加快响应
- CDN
- 减少DNS查询次数
- 提前加载,延迟加载
- 首页最小内容显示,将样式表置顶渲染页面,将js放到底部不阻塞页面渲染。
三、资源层面
- 能用不那么高清图片,就用体积小的图片
- 压缩业务代码
- 压缩减少或不要cookie,每次请求头都会带上
- 把静态资源放在另外一个域名,根据域名划分内容。
浏览器一般对同一个域的下载连接数有所限制,按照域名划分下载内容可以浏览器增大并行下载连接。
但是注意控制域名使用在2-4个之间,不然dns查询也是个问题。
一般网站规划会将静态资源放在类似于static.example.com,动态内容放在www.example.com上。
这样做还有一个好处是可以在静态的域名上避免使用cookie。页面内容使用无cookie域名
- 使用小且可缓存的favicon.ico网站图标文件favicon.ico。
不管你服务器有还是没有,浏览器都会去尝试请求这个图标。所以我们要确保这个图标存在文件尽量小,最好小于1k设置一个长的过期时间
四、代码层面
- html尽量减少dom的数量(可以 document.getElementsByTagName(‘*’).length 查看有多少个)
- 避免CSS表达式,CSS表达式的问题在于它被重新计算的次数远比我们想象的要多,不仅在网页绘制或大小改变时计算,即使我们滚动屏幕或者移动鼠标的时候也在计算,因此我们还是尽量避免使用它来防止使用不当而造成的性能损耗。
- 减少对dom的操作
- 用代替@import,避免使用@import的原因很简单,因为它相当于将css放在网页内容底部。
- 使用智能事件处理
这里说智能的事件处理需要开发者对事件处理有更深入的了解,通过不同的方式尽量少去触发事件,如果必要就尽早的去处理事件。比如一个div中10个按钮都需要事件句柄,那么我们可以将事件放在div上,在事件冒泡过程中捕获该事件然后判断事件来源。