前景描述:最近一直在学习html5移动开发,找了很多资料,做了很多的页面。奈何作为一个程序猿,没有前端攻城狮那般专业,处处碰壁,想遍各种方法,经历各种尝试,最终的效果自己都能看醉。其中最大的问题就是 卡。这种卡分设备,设备越差效果越明显。为此,绞尽脑汁,成天在google上爬着。

  以前,为了体验更好,用了iscroll,为了简单的完成瀑布流的布局,用了masnory。后来发现用jquery写的动画总感觉一帧帧的跳着走,iscroll越用越卡。原本一帆风顺的开发路渐渐变得无比坎坷。于是也就翻了很多的资料,做了很多实验,对此做个小小的总结。

  1、注意绝对定位。由于绝对定位的元素在浏览器绘制页面时需要计算它的位置,所以在某些特殊的情况下会有较明显的印象。如使用masonry进行瀑布流布局。masonry在布局中使用的是对元素进行绝对定位。一旦页面元素过多,页面会变得越来越卡。很多时候一个position:fixed的元素可以终结一个流畅的页面。

  2、使用CSS3进行动画实现。如为元素指定margin值实现元素位移,改变元素margin会导致页面重新渲染部分或整个页面。相应的可以使用transform代替margin。

  3、对动画元素启用硬件加速。如果用代码描述:transfrom:translateZ(0)。这样某些浏览器会使用GPU渲染这个元素。说实在的这个感触不是特别深,且GPU这货不能太过依赖它,容易适得其反。

  4、图片大小控制。这个应该是最坑的,效果也是最明显的。同样的页面,不同的数据,不同的效果。爬了好久才从这个坑里爬出来。这里说的图片大小控制,主要是指图片尺寸。卡的主要原因在于,当浏览器渲染页面时如果没有指定的图片尺寸,或者如果指定的尺寸不符合图片的实际尺寸,一旦图片下载完成,浏览器将需要reflows和重新绘制页面。而若图片在一个长长的列表中,意味着每下载完成一张图片就需要重绘整个列表。在css中指定图片大小,有助于浏览器渲染(先画好框框,直接就可以填蛋。),而指定尺寸因尽量和图片尺寸相符。当然,除尺寸外,图片流大小(图片有多少kb)也应尽量控制,因为内存消耗的原因,图片过大也会卡。

  5、尽量不使用动态图片,gif动画会导致浏览器不断的进行绘制、栅格化、合成。比如在数据加载时显示一朵一直旋转的菊花,或许在比较老一点的手机上这个菊花不会转或很卡的转,这种情况,建议使用Css3做loading效果。

  6、不在长列表元素中使用position:absolute、fixed...。比如产品列表、评论列表等等。 position需要计算,在一个长列表中使用渲染时会增加额外的开销。

   7、不在长列表下方元素使用position:absolute、fixed...。比如列表下的“加载更多”。

   8、setTimeout、setInterval这两货最好少使。能用RequestAnimationFrame就使用RequestAnimationFrame吧。并非所有浏览器都有这货,我的就没有,所以我的手机被同事称之为测试标准。兼容方法如下:

  

window.requestAnimationFrame = window.requestAnimationFrame || function (callback) { callback.call(); };

  9、DOM读写分离批量操作。

//两次渲染
var h1 = $("div.h").height();
$("div.ha").height(h1); var h2 = $("div.hh").height();
$("div.hb").height(h2); //一次渲染
var h1 = $("div.h").height();
var h2 = $("div.hh").height(); $("div.ha").height(h1);
$("div.hb").height(h2);

  10、某些手机浏览器未必认识transform因为在他们那里叫-webkit-transform(比如微信里的浏览器)。而这货坑在哪儿呢?在这儿:-webkit-transition:transform 1s; 这样真的就有效吗?-webkit-transition:-webkit-transform 1s;这样才有效。

    

  总结:以目前所见,对性能影响排名前三的应该是:position、动态gif、图片。 希望各大手机厂商进一步提高手机硬件性能,希望各大系统厂商能进一步提高系统性能。这样在不久的将来就不需要再如此折腾。

Html5移动应用性能优化笔记的更多相关文章

  1. Android App性能优化笔记之一:性能优化是什么及为什么?

    By Long Luo   周星驰的电影<功夫>里面借火云邪神之口说出了一句至理名言:“天下武功,唯快不破”. 在移动互联网时代,同样如此,留给一个公司的窗口往往只有很短的时间,如何把握住 ...

  2. U3D开发性能优化笔记(待增加版本.x)

    http://blog.csdn.net/kaitiren/article/details/45071997 此总结由自己经验及网上收集整理优化内容 包括: .代码方面: .函数使用方面: .ui注意 ...

  3. 移动web性能优化笔记

    移动web性能优化 最近看了一些文章,对移动web性能优化方法,做一个简单笔记 笔记内容主要出自 移动H5前端性能优化指南和移动前端系列——移动页面性能优化

  4. JS性能优化笔记搜索整理

    通过网上查找资料了解关于性能优化方面的内容,现简单整理,仅供大家在优化的过程中参考使用,如有什么问题请及时提出,再做出相应的补充修改. 一. 让代码简洁:一些简略的表达方式也会产生很好的优化 eg:x ...

  5. HTML5 网络拓扑图性能优化

    HTML5 中的 Canvas 对文本的渲染(fillText,strokeText)性能都不太好,比如设置字体(font).文本旋转(rotation),如果绘制较多的文本时,一些交互操作会手动很大 ...

  6. MySQL性能优化笔记整理

    一.测试篇 1.测试目的,就是量化找出短板(基础参数配置) 2.测试三大指标 IOPS:每秒处理的IO请求数,即IO响应速度(注意和IO吞吐量的区别) QPS:每秒请求(查询)次数 TPS:每秒事务数 ...

  7. Android应用性能优化笔记(java代码优化)

    Java代码优化  缓存结果:  如果计算代价过高,最好把过去的结果缓存起来. 伪代码如下: result=cache.get(n);        //输入参数n作为键 if(result==nul ...

  8. .Net+SQL Server企业应用性能优化笔记—精确查找瓶颈

    首先我们需要部署一个测试环境,将Web项目的源代码拷到测试环境Web服务器IIS上,使得可以直接通过IE访问我们的网站.SQL Server环境可以部署在同一台机器上,条件允许的话有专门的数据库测试服 ...

  9. 【MVC+MySQL+EntityFramework】查询性能优化笔记

    通过在DbContext中定了表之间的关系,查询后在View中通过item.ProjectOverHour来显示关联表数据. modelBuilder.Entity<ProjectOverHou ...

  10. C++性能优化笔记

    最近着手去优化项目中一个模块的性能.该模块是用C++实现,对大量文本数据进行处理. 一开始时,没什么思路,因为不知道性能瓶颈在哪里.于是借助perf工具来对程序进行分析,找出程序的性能都消耗在哪里了. ...

随机推荐

  1. 2.10 破解密码这么简单,Linux是安全的操作系统吗?

    很多人看到系统修复模式这节内容时,都会有所感慨:Linux 的密码破解太容易了,这样的操作系统还安全吗?Linux 不是以安全性著称的吗? 图 1 密码安全 本节,我们结合图 1 解释一下类似的问题. ...

  2. 2.9 使用系统光盘修复Linux系统

    如果系统错误已经导致单用户模式不能进入了,那么是否需要重新安装Linux 系统?不用着急,为了应对单用户模式也无法修复的错误,Linux 系统提供了 rescue 救援(光盘修复)模式. rescue ...

  3. 探索 USB 上网模组,Air780ER 当仁不让

    今天探索的是USB上网模组,我推荐的是Air780ER模组,本文从用户实际使用的角度,解答大家对Air780ER最关心的一些问题,内容不深入探究技术细节,更多从选型.应用等非技术维度展开. 一.Air ...

  4. typeScript 基础类型 (三)

    typeScript 的基础类型包含 Boolean.Number.String.null.undefined 以及 ES6 的  Symbol 和 ES10 的 BigInt. 下面介绍每种类型的使 ...

  5. Abp Vnext Vue版本(Vben Admin5.0)

    前言 之前有提供免费开源的基于vben2.8版本的abp vnext pro版本 abp vnext pro vben admin 2.8 vben2.8作者已经重构一个版本,命名为vben5,而vb ...

  6. [python] asyncio库常见问题与实践案例

    本文详细介绍了在使用asyncio库编写异步程序时常见的错误和问题,并进一步通过实践案例进行分析和讨论,以便在项目中更有效地应用asyncio库.有关asyncio库的详细介绍,可参考:Python ...

  7. redis6.0安装与使用

    [Linux] 源码安装: 下载安装 Cd /usr/local/src/ wget https://download.redis.io/releases/redis-6.0.9.tar.gz $ t ...

  8. Lua之基础篇

    新到一家公司,接触有些业务竟然直接通过服务器,在nginx层面就完成了,主要是基于OpenResty和Lua来实现的.打算深入了解一下这门神奇的语言... 为了嵌入应用程序中,从而为应用程序提供灵活的 ...

  9. Python版本与Jupyter记录

    最近使用Python的时候,遇到一个版本问题.我本地安装的Python版本是3.8.0,在使用match...case...语法时,提示如下报错: 查询之后,才知晓3.8.0还没有match语法,ma ...

  10. Winform多线程持续读取PLC数据

    1.Winform窗体界面 2.后台代码 点击查看代码 using Modbus.Device; using System; using System.Collections.Generic; usi ...