前端优化

352 阅读3分钟

前端优化


网路方面

建立网络连接需要时间成本,而且浏览器同一时间发送的网络请求数量是有限的,所以,减少请求数目是一个优化方向。

1.减少http请求

  • 合并js文件(webpack打包工具会做)
  • 合并css文件(webpack打包工具会做)
  • 雪碧图的使用
  • 简单图片是用base64编码

小图片可以转成base64格式使用。10k以下的图片(不是固定标准)。但是也不能太多使用base64,影响html文件大小和易读性

2.减少资源体积

  • gzip压缩

//安装 compression-webpack-plugin npm compression-webpack-plugin --save-dev //配置config config>index.js(webpack已经预设置好,只需要开启即可) productionGzip: true

  • js混淆

YUI Compressor是java程序,可以压缩css和js,特点:移除注释、移除不必要的空格、标识符替换、其它优化

  • css压缩

同上

  • 图片压缩

缩小图片分辨率、改变图片格式、降低图片保存质量、使用tiny等图片网站压缩

3.缓存

  • DNS缓存
  • CDN缓存
  • http缓存

4.移动端优化

  • 使用长cache,减少重定向
  • 首屏优化,保证首屏加载数据小于14kb
  • 不滥用web字体

渲染和DOM操作

1.优化网页渲染

  • css文件放在头部,js文件放在尾部或者异步
  • 尽量避免内联样式

2.DOM操作优化

  • 避免在document上进行频繁DOM操作
  • 使用classname代替内联样式修改
  • 对于复杂的UI元素,position设置为absolute或者fixed
  • 尽量使用css动画(比js动画简单,不卡顿)
  • 使用requestAnimationFrame代替setInterval
  • 适当使用canvas
  • 尽量减少css表达式的使用
  • 使用事件代理

3.操作细节优化

  • 避免图片或者frame使用空src
  • 在css属性为0时,去掉单位
  • 禁止图片缩放
  • css前缀的正确使用
  • 移除空的css规则
  • css中可继承属性,尽量使用继承,减少设置
  • 缩短css选择器

4.移动端优化

  • 长列表滚动优化

ios尽量使用局部滚动,安卓尽量使用全局滚动。给body添加-webkit-overflow-scrolling:touch

  • 函数防抖和函数节流
  • 使用touchstart、touchend代替click

使用fastclick或者zepto的tap事件代替click也可以

  • HTML的viewport设置
  • 开启GPU渲染加速

css中translateZ,让浏览器开启GPU渲染

webkit-transform: translateZ(0);
-moz-transform: translateZ(0);
-ms-transform: translateZ(0);
-o-transform: translateZ(0);
transform: translateZ(0);

或者

webkit-transform: translate3d(0,0,0);
-moz-transform: translate3d(0,0,0);
-ms-transform: translate3d(0,0,0);
-o-transform: translate3d(0,0,0);
transform: translate3d(0,0,0);

如果开启GPU硬件加速之后,有些时候可能会导致浏览器频繁闪烁或抖动,可以尝试以下办法解决之

-webkit-backface-visibility:hidden;
-webkit-perspective:1000;

数据方面

1.图片加载处理

  • 图片预加载
  • 图片懒加载

先给图片的src指定一个简单的图片,然后将图片的真实地址设置成自定义的属性,做一个占位,给图片设置监听事件,一旦图片达到视口位置,将真实地址赋值到src上

  • 首屏加载时进度条的现实

2.异步请求的优化

  • 使用正常的json数据格式进行交互
  • 部分常用数据缓存

storage的使用,可以缓存数据又不怕cookie暴露

  • 控制Cookie大小和污染
  • 数据埋点和统计
  • webWorker的使用(多线程开启)