网络通信 http1.1协议优化:
- 多域名;css / js 一个接口,图片一个接口,接口一个域名。底层逻辑是在http1.1协议下一个tcp链接只能建立4-8个请求,多域名能提供并发请求的可能性。
- 精灵图/雪碧图,将多个图片合成一个图片。
- 合并小文件,跟精灵图一个道理。
http2.0协议优化 http1.1的优化都不管用了,他跟http1.1的区别是:
- http1.1是以文件的形式传输,2.0是以二进制来传输。
- http2.0 是用帧和流进行传输,他没有tcp的链接数限制,可以发出多个请求,1.1是用字符串进行传输。
- 2.0会压缩首部字段/服务器推送
- http缓存:cache-control:max-age()
资源加载
- API 请求
(1)使用promise并发请求 (2)取消重复的请求(比如tab切换) (3)浏览器缓存api接口,比如5分钟以内再次访问接口都走缓存 (4)如有必要可以使用serverce worker(pwa)
-
静态资源加载
(1)走cdn,开启负载均衡 (2)动态加载(用到的时候再加载) (3)引用资源的时候开启预加载/预解析(preload/preFetch) (4) js资源可以使用defer,在浏览器解析渲染页面的时候并行下载js但是不执行
-
图片文件
(1)图片选择优先顺序:webp -> jpg(看格式) -> png (2)图片使用渐进式加载(先模糊后清晰);一点一点显示的加载方式因为用户思维角度已经放弃 (3)图片的大小尽量和显示时的大小尽量一致
代码优化
- CSS优化
(1)少用通配符和标签选择器:选择器是从右往左解析的 (2)less嵌套层级不要太深 (3)写通用css
- JS优化
- 使用预先执行模式:不同环境下取不同的配置,可以使用立即执行,而不是用的时候再去走函数然后执行js.
- 适当使用代理模式,比如查找本地存储数据的时候,可以用map代理一下。因为map访问速度很快
- 能用css3做动画的地方就不要使用js。一定要使用也尽量使用requestAnimationFrame
- 使用switch代替if esle;使用for of代替for in和for循环
- 不要再render里写三目运算符/函数,因为这样写会让里面的代码每次都重新渲染
- 模块代码的解藕