h5性能优化,细节决定结果。

介绍一些最近整理的优化细节。图片压缩什么的就不说了,这是优化必须做的。今天就说一下大家写代码时可以培养的优化的细节点。

  • 不滥用float。不滥用web字体。

Float在渲染时计算量比较大,并且会脱标、塌陷。我们可以用flex布局来代替。web字体引入需要不小的消耗,最好跟设计提一下不要太多。

  • css中避免多余的样式设置。

color、font、line-height等都是可以继承的,所以他们的子元素如果属性一样就要重复写了,特别是font-family。

  • 复杂的一个方法,可以缓存函数的返回值。

function cached (fn) {
    var cache = Object.create(null);
    return (function cachedFn (str) {
        var hit = cache[str];
        return hit || (cache[str] = fn(str))
    })
};
var fk = function (str) {
  return str.charAt(0).toUpperCase() + str.slice(1)
}
var cacheFk = cached(fk)
// 1 step
cacheFk('ui')
//2 step
cacheFk('ui')

这是我看vue源码时发现的一段代码,作用就是可以缓存一个复杂函数的值,如果参数一样就不重复计算。但这里要注意的是,这个缓存函数是通过闭包来做的,所以要做一些权衡。

  • 尽量减少layout。

// 触发两次 layout
var newWidth = Div.offsetWidth + 50;
Div.style.width = newWidth + 'px';
var newHeight = Div.offsetHeight + 50;
Div.style.height = newHeight + 'px';

// 只触发一次 layout
var newWidth = Div.offsetWidth + 50;
var newHeight = Div.offsetHeight + 50;
Div.style.width = newWidth + 'px';
Div.style.height = newHeight + 'px';

所有可触发layout的操作都会被暂时放入 layout-queue 中,等到必须更新的时候,再计算整个队列中所有操作影响的结果,如此就可只进行一次的layout,从而提升性能。

动画元素最好脱标,不影响其他模块。这样也是为了不影响其他元素。

  • transform代替position。

做一些css位移效果,最好用transform而不要用定位。我刚入门的时候用position做动画卡的一匹~~~

  • 选择dom元素使用id,但不要为设置css而定义id。

如果用id选择器,就不要加其他class约束。定义过多id会使重用性降低,维护更困难,所以css中不建议多用id。

  • 多次使用length的时候,要用变量保存。

var len = dom.length;
for(var i = 0;i < len;i++){};

这样好处就是每次循环,不用都计算dom的长度了。

  • requestAnimationFrame代替setTimeout

var start = null;
var element = document.getElementById('SomeElementYouWantToAnimate');
element.style.position = 'absolute';

function step(timestamp) {
  if (!start) start = timestamp;
  var progress = timestamp - start;
  element.style.left = Math.min(progress / 10, 200) + 'px';
  if (progress < 2000) {
    window.requestAnimationFrame(step);
  }
}

window.requestAnimationFrame(step);
//window.requestAnimationFrame(callback);
返回值是一个 long 整数,请求 ID ,是回调列表中唯一的标识。是个非零值,没别的意义。你可以传这个值给 window.cancelAnimationFrame() 以取消回调函数。

requestAnimationFrame就是不用设置时间的定时器,每1/60s运行一次,这是根据浏览器刷新帧数来定的。但兼容是个问题,用的话需要写好兼容。

  • 如果可以,尽量避免全局查找。

//dom = document.querySelector("#id");
function test() {
    dom = document.querySelector("#id");
}

比如上面的,如果只做test内使用dom 就不要在全局定义,因为执行的时候会现在test函数内部作用域查找,速度会快。

  • 除非不知道遍历的长度或者遍历对象 不要用for in

    function t1(){        //20ms
        var i = 0;
       for(item in anObj) {
           i++
       }
       if( i === 100000){
           console.log('for in ok')
       }
    }
    function t2(){     //4ms
        var len = anObj.length;
        var i = 0;
        for(var i = 0 ;i < len;i++){
            i++
        }
        if( i === 100000){
            console.log('for ok')
        }
    }

这是我自己试验循环100000个元素的数组,得出的执行时间(看代码)。所以最好别用,一般实际也不会用到遍历对象。如果真有特殊情况遍历对象,也要注意 !!!遍历出来的东西是不是自己。以为for in是会遍历其原型链的。

  • 骨架屏

这个是增强用户体验,类似增强版loading。有自动化生成方案。感兴趣可以看看。

  • ios禁止页面识别手机号。Android禁止识别邮箱。

<meta name="format-detection" content="telephone=no" />
<meta name="format-detection" content="email=no" />
  • 头部css 底部js。

这个大家都知道,js将阻塞解析dom,增加白屏时间。所以一定要注意啊。

其实优化的细节很多,所以要好好培养自己的编码习惯,积少成多,慢慢的不断积累,代码的质量肯定就不同了。 最后祝大家身体健康。

原文地址:https://segmentfault.com/a/1190000016829127

原文地址:https://www.cnblogs.com/lalalagq/p/9943635.html

时间: 2024-12-11 10:11:17

h5性能优化,细节决定结果。的相关文章

[转] 钉钉的H5性能优化方案

对于一个H5的产品,功能无疑很重要,但是性能同样是用户体验中不可或缺的一环.原本H5的渲染性能就不及native的app,如果不把性能优化做起来,将极大地影响用户使用产品的积极性. 用户感受 当用户能够在1-2秒内打开H5页面,看到信息的展示,或者能够开始进行下一步的操作,用户会感觉速度还好,可以接受:而页面如果在2-5秒后才进入可用的状态,用户的耐心会逐渐丧失:而如果一个界面超过5秒甚至更久才能显示出来,这对用户来说基本是无法忍受的,也许有一部分用户会退出重新进入,但更多的用户会直接放弃使用.

H5性能优化方案

H5性能优化意义 对于一个H5的产品,功能无疑很重要,但是性能同样是用户体验中不可或缺的一环.原本H5的渲染性能就不及native的app,如果不把性能优化做起来,将极大地影响用户使用产品的积极性. 用户感受 当用户能够在1-2秒内打开H5页面,看到信息的展示,或者能够开始进行下一步的操作,用户会感觉速度还好,可以接受:而页面如果在2-5秒后才进入可用的状态,用户的耐心会逐渐丧失:而如果一个界面超过5秒甚至更久才能显示出来,这对用户来说基本是无法忍受的,也许有一部分用户会退出重新进入,但更多的用

如何做好H5性能优化?

一.背景介绍 智能手机的普及.移动互联网的发展.微信异军突起,都为 H5 的发展提供了良好的环境.当前,H5 已被广泛应用于营销.广告.传播之中.而针对 H5 效率慢.体验差的硬伤,如何做好性能测试并优化其性能就显得尤为重要. 红豆 Live 是微博子公司有信旗下的一款语音直播产品,有各种 H5 页面.我们在做 H5 性能测试时进行了总结,本文将为大家详细介绍 H5 性能测试的关注点.测试工具及常见问题. 二.H5 页面的劣势 HTML5 作为一门重要的开发语言,有着显著的优势,其开发速度快.运

H5性能优化

说到H5测试,对于做WEB测试的同学来说再熟悉不过了,它包括页H5功能测试,前端性能测试,浏览器兼容性能测试,以及服务端性能测试.那本文谈到的则是H5前端性能测试,并希望通过阅读本文后,能够知道:H5前端性能测试什么?如何发现问题以及相应的优化规则. 一.浏览器渲染引擎 浏览器是Html解析和页面最终展示的工具,所以测试H5前理解浏览器的工作原理是必不可少的,具体可参考<浏览器工作原理>. 浏览器的主要功能 浏览器的主要功能是将用户选择的web资源呈现出来,它需要从服务器请求资源,并将其显示在

关于java性能优化细节方面的建议

在Javva程序中,性能问题的大部分原因并不在于Java语言,而是程序本身,养成一个良好的编码习惯非常重要,能够显著地提升程序性能.下面来聊聊该方面的建议: 1.尽量在合适的场合使用单例: 所谓单例,这里不详细说(哈哈,常识),使用单例,可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面: 1)控制资源的使用,通过线程同步来控制资源的并发访问: 2)控制实例的产生,以达到节约资源的目的: 3)控制数据共享,在不建议直接关联的条件

jQuery 性能优化细节

现在越来越多的人应用jQuery了,有些同学在享受爽快淋漓coding时就将性能问题忽略了, 比如我. jquery虽在诸多的js类库中性能表现还算优秀, 但毕竟不是在用原生的javascript开发, 性能问题还是需要引起重视的. 总是从ID选择器开始继承 在class前使用tag 将jquery对象缓存起来 掌握强大的链式操作 使用子查询 对直接的DOM操作进行限制 冒泡 消除无效查询 推迟到 $(window).load 压缩js 全面掌握jquery库 1. 总是从ID选择器开始继承 在

H5页面性能优化

H5性能优化的两个原则 1.最少化请求个数 2.最小单个文件大小 最少请求个数 为什么要减少请求次数: 手机浏览器同时响应请求为4个请求(Android支持4个,iOS 5后可支持6个) 如何减少请求次数: 1.合并图片(将若干个小图合并成一个大图.雪碧图) 2.合并JS/CSS文件(Nginx_concat_module) 天猫与淘宝的线上实践: 相同网络条件下合并后与合并前的数据对比: 文件大小:2.0KB     小于   1.2KB +  942B + 997B 下载耗时:761ms  

H5缓存机制浅析-移动端Web加载性能优化【干货】

转载:H5缓存机制浅析-移动端Web加载性能优化[干货] 作者:贺辉超,腾讯游戏平台与社区产品部 高级工程师 目录 1 H5缓存机制介绍 2 H5缓存机制原理分析 2.1 浏览器缓存机制 2.2 Dom Storgage(Web Storage)存储机制 2.3 Web SQL Database存储机制 2.4 Application Cache(AppCache)机制 2.5 Indexed Database (IndexedDB) 2.6 File System API 3 移动端Web加载

从细节出发 纯后端性能优化实战小结

最近2个月没做什么新项目 完全是对于旧的系统进行性能优化 避免超时 死锁 数据处理能力不够等常见的性能问题 这里不从架构方面出发 毕竟动大手脚成本比较高 那么我们以实例为前提 从细节开始 优化角度 一.业务逻辑优化 二.DB优化 三.数据处理优化 四.锁与性能 五.细节 业务逻辑优化 这一条不具有普遍性 不同的业务不同的场景 如果归纳起来 就是在不影响业务的前提下进行流程精简 1. 废弃冗余逻辑 常见于各种基于数据库的检查 很多同学在维护别人代码的时候 没有深入理解别人的逻辑 也许别人在取数据的