美文网首页前端技术
很常用的前端优化点

很常用的前端优化点

作者: 愿你如夏日清凉的风 | 来源:发表于2017-11-21 14:54 被阅读31次

    做前端开发一段时间后,相信很多人都会养成一定的编码习惯,无论是HTML、CSS还是JS,都有一些自己的写法,有些是好的,有些却非常值得我们去改正,而这些需要改正的写法如果记住了,并且一直在沿用,不但可以优化自己的项目,也能提高自己的开发水平。下面我所列出来的这些都是特别基础的优点,我们在工作中非常容易用到,希望看到的同学能够尽量去使用它,我们一起进步...

    避免页面中空的 href 和 src

    <link>标签的 href 属性为空,或 <script><img><iframe>标签的 src 属性为空时,浏览器在渲染的过程中仍会将 href 属性或 src 属性中的空内容进行加载,直至加载失败,这样就阻塞了页面中其他资源的下载进程,而且最终加载到的内容是无效的,因此要尽量避免。

    <!--不推荐-->
    <img src="" alt="photo" >
    <a href="">点击链接</a>
    
    使用可缓存的 AJAX

    对于返回内容相同的请求,没必要每次都直接从服务端拉取,合理使用 AJAX 缓存能加快 AJAX 响应速度并减轻服务器压力。

    $.ajax({
        url : url,
        type : 'get',
        cache : true, //推荐使用缓存
        data : {},
        success (){//...},
        error (){//...}
    });
    
    使用 GET 来完成 AJAX 请求

    使用 XMLHttpRequest 时,浏览器中的 POST 方法会发起两次 TCP 数据包传输,首先发送文件头,然后发送 HTTP 正文数据。而使用 GET 时只发送头部,所以在拉取服务端数据时使用 GET 请求效率更高。

    $.ajax({
        url : url,
        type : 'get', //推荐使用get完成请求
        data : {},
        success (){//...},
        error(){//...}
    });
    
    减少 DOM 元素数量和深度

    HTML 中标签元素越多,标签的层级越深,浏览器解析 DOM 并绘制到浏览器中所花的时间就越长,所以应尽可能保持 DOM 元素简洁和层级较少。

    <!--不推荐-->
    <div>
        <span>
            <a href="javascript:void(0);">
                <img src="./path/photo.jpg" alt="图片">
            </a>
        </span>
    </div>
    <!--推荐-->
    <img src="./path/photo.jpg" alt="图片" >
    
    尽量避免在选择器末尾添加通配符

    CSS 解析匹配到 渲染树的过程是从右到左的逆向匹配,在选择器末尾添加通配符至少会增加一倍多计算量。

    减少使用关系型样式表的写法

    直接使用唯一的类名即可最大限度的提升渲染引擎绘制渲染树等效率。

    图片懒加载

    为了保证页面内容的最小化,加速页面的渲染,尽可能节省移动端网络流量,页面中的图片资源推荐使用懒加载实现,在页面滚动时动态载入图片。

    <img data-src="//cdn.domain.com/path/photo.jpg" alt="懒加载图片" >
    

    写JS代码

    尽量使用 id

    选择器选择页面 DOM 元素时尽量使用 id 选择器,因为 id 选择器速度最快。

    合理缓存 DOM 对象

    对于需要重复使用的 DOM 对象,要优先设置缓存变量,避免每次使用时都要从整个 DOM 树中重新查找。

    //不推荐
    $('#mod.active').remove('active');
    $('#mod.not-active').addClass('active');
    //推荐
    let $mod=$('#mod');
    $mod.find('.active').remove('active');
    $mod.find('.not-active').addClass('active');
    
    页面元素尽量使用事件代理,避免直接事件绑定

    使用事件代理可以避免对每个元素都进行绑定,并且可以避免出现内存泄露及需要动态添加元素的事件绑定问题,所以尽量不要直接使用事件绑定。

    //不推荐
    $('.btn').on('click',function(e){
        console.log(this);
    });
    //推荐
    $('body').on('click','.btn',function(e){
        console.log(this);
    });
    
    使用 touchstart 代替 click

    由于移动端屏幕的设计, touchstart 事件和 click 事件触发时间之间存在 300 毫秒的延时,所以在页面中没有实现 touchmove 滚动处理的情况下,可以使用 touchstart 事件来代替元素的 click 事件,加快页面点击的响应速度,提高用户体验。但同时我们也要注意页面重叠元素 touch 动作的点击穿透问题。

    //不推荐
    $('body').on('click','.btn',function(e){
        console.log(this);
    });
    //推荐
    $('body').on('touchstart','.btn',function(e){
        console.log(this);
    });
    
    避免 touchmove、scroll 连续事件处理

    需要对 touchmove、scroll 这类可能连续触发回调的事件设置事件节流,例如设置每隔 16ms(60 帧的帧间隔为 16.7ms,因此可以合理地设置为 16ms )才进行一次事件处理,避免频繁的事件调用导致移动端页面卡顿。

    //不推荐
    $('.scroller').on('touchmove','.btn',function(e){
        console.log(this);
    });
    //推荐
    $('.scroller').on('touchmove','.btn',function(e){
        let self=this;
        setTimeout(function(){
            console.log(self);
        },16);
    });
    

    渲染类

    不滥用 float

    在 DOM 渲染树生成后的布局渲染阶段,使用 float 的元素布局计算比较耗性能,所以尽量减少 float 的使用,推荐使用固定布局或 flex-box 弹性布局的方式来实现页面元素布局。

    相关文章

      网友评论

        本文标题:很常用的前端优化点

        本文链接:https://www.haomeiwen.com/subject/kwwvvxtx.html