您的位置:首页 > Web前端

web前端性能优化实践

2017-01-05 15:16 513 查看
更新时间:2017年9月2日21:35:21

    作为一名合格的前端开发人员,必须考虑和面对的一个问题就是性能优化,尤其对于大型网站来说,这个技术 || 技能是必不可少的。从问题入手,选择合理方案。

    性能优化规范

1、加载优化

    合并CSS,JavaScript;合并小图片,使用雪碧图;缓存一切可以缓存的资源;使用长Cache;使用外联样式引用CSS,JavaScript;压缩HTML、CSS、JavaScript;启用GZip;使用首屏加载;使用按需加载;使用滚屏加载;通过Media Query加载;增加Loading进度条;减少Cookie;避免重定向;异步加载第三方资源;

2、CSS优化

    CSS写在头部,JavaScript写在尾部或异步;避免图片和IFrame等的空src;避免重设图片大小;图片避免使用DataURL;避免在HTML标签中写style属性;避免CSS表达式;移除空的CSS规则;正确使用display属性;不滥用float;不滥用web字体;不声明过多的font-size;值为0时不需要任何单位;标准化浏览器前缀;

3、图片优化

    使用智图http://zhitu.tencent.com;使用(CSS3、svg、iconfont)代替图片;使用srcset;webp优于jpg;png8优于gif;首次加载不大于1014kb(基于3秒联通平均网速所能达到值);图片不宽于640;

4、脚本优化

    减少重绘和重排(回流);缓存DOM选择与计算;缓存列表的length;使用事件委托,避免批量绑定事件;使用ID原则器;使用touchstart、touchend代替click

5、渲染优化

    HTML使用viewport;减少DOM节点;使用CSS3动画;合理使用requestAnimationFrame动画代替setTimeout;适当使用canvas动画;touchmove、scroll事件会导致多次渲染;使用(
db90
css3 transitions、3D transform、opacity、canvas、webgl、video)来触发GPU渲染

  方案:

1、传输层面:减少请求次数(合并样式、脚本文件、图片),降低请求量

2、执行层面:减少重绘和重排
    其他
1.事件处理程序的数量越多,页面的整体运行性能越差,用户体验越差。

    事件处理程序为用户体验提供了丰富的交互性,但任何事件处理程序都会增加DOM访问次数,从而延迟整个页面的交互就绪事件。同时,定义的对象越多,内存消耗越大,运行性能就越差。

    解决同类事件处理程序过多的方案,可采用事件委托。事件委托技术利用了事件冒泡,指定一种类型的事件处理程序,就可以管理该类型的所有事件。子元素的click事件一直会冒泡到document层级,也就是说为整个页面指定一个onclick事件,就可以监听页面内每个元素上的单机事件,而不必为每个元素单独添加事件处理程序。

    可以采用事件委托技术的事件主要包括但不限于:鼠标事件和键盘事件。(必须是可以冒泡的事件)

<div id='eventDiv'>

    <span id='span01'></span>

    <span id='span02'></span>

    <span id='span03'></span>

</div>

var $eventDiv = $('#eventDiv');

EventUtil.addHandler($eventDiv,'click',function(event){

 
  event = EventUtil.getEvent(event);

 
  var target = EventUtil.getTarget(event);

    switch(target.id){

case 'span01':

    alert('i am span01');

    break;

case 'span02':

    alert('i am span02');

    break;

case 'span03':

    alert('i am span03');

    break;

    }

})

2.页面图片过多,导致同一时间http请求量过大,页面性能下降。

解决方案:图片懒加载技术(延迟加载)

实现原理:按需加载,即仅加载用户可视区域图片

第一步,设置页面需要进行懒加载的图片背景为统一样式,img{background:url(./img/loading.png) center center no-repeat;width:100%;}

第二步,检测图片是否进入可视区域,图片进入可视区域的条件是:

图片距离页面顶部距离 - 纵向滚动条距离页面顶部距离 < 可视区域高度

document.getElementsByClassName('mdiv')[0].offsetTop - document.body.scrollTop < window.innerHeight

$('.mdiv')[0].offsetTop -  $(window).scrollTop() <window.innerHeight

第三步,对进入可视区域的图片进行加载

window.onload = function(){}

window.onscroll = function(){}

附图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: