JS性能优化探讨

一、最核心一点,减少http请求,3次握手,冷启动,成本昂贵

  1. 合并小js文件
  2. 使用雪碧图
  3. 小图转换成base64放到代码里
  4. 设置缓存

二、加快响应

  1. CDN
  2. 减少DNS查询次数
  3. 提前加载,延迟加载
  4. 首页最小内容显示,将样式表置顶渲染页面,将js放到底部不阻塞页面渲染。

三、资源层面

  1. 能用不那么高清图片,就用体积小的图片
  2. 压缩业务代码
  3. 压缩减少或不要cookie,每次请求头都会带上
  4. 把静态资源放在另外一个域名,根据域名划分内容。
    浏览器一般对同一个域的下载连接数有所限制,按照域名划分下载内容可以浏览器增大并行下载连接。
    但是注意控制域名使用在2-4个之间,不然dns查询也是个问题。
    一般网站规划会将静态资源放在类似于static.example.com,动态内容放在www.example.com上。
    这样做还有一个好处是可以在静态的域名上避免使用cookie。页面内容使用无cookie域名
  5. 使用小且可缓存的favicon.ico网站图标文件favicon.ico。
    不管你服务器有还是没有,浏览器都会去尝试请求这个图标。所以我们要确保这个图标存在文件尽量小,最好小于1k设置一个长的过期时间

四、代码层面

  1. html尽量减少dom的数量(可以 document.getElementsByTagName(‘*’).length 查看有多少个)
  2. 避免CSS表达式,CSS表达式的问题在于它被重新计算的次数远比我们想象的要多,不仅在网页绘制或大小改变时计算,即使我们滚动屏幕或者移动鼠标的时候也在计算,因此我们还是尽量避免使用它来防止使用不当而造成的性能损耗。
  3. 减少对dom的操作
  4. 代替@import,避免使用@import的原因很简单,因为它相当于将css放在网页内容底部。
  5. 使用智能事件处理
    这里说智能的事件处理需要开发者对事件处理有更深入的了解,通过不同的方式尽量少去触发事件,如果必要就尽早的去处理事件。比如一个div中10个按钮都需要事件句柄,那么我们可以将事件放在div上,在事件冒泡过程中捕获该事件然后判断事件来源。