前景描述:最近一直在学习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. 基于常量值提取浅析elf文件结构

    Elf(可执行和可链接文件)是一个永远也绕不开的话题,只要我们还在使用安卓手机/linux服务器,我们就需要了解elf的一些方方面面,现在就让我们从一个常量值提取的小需求出发,逐步解析elf文件结构吧 ...

  2. 支持多语言、多商店的商城,.Net7 + EF7领域驱动设计架构

    推荐一个跨平台.模块化.可扩展且超快速的开源一体化电子商务平台. 01项目简介 Smartstore 支持桌面和移动平台.多语言.多商店.多货币的商城,并支持SEO优化,支持无限数量的产品和类别.报表 ...

  3. 记录CentOS 部署 express 项目

    第一步.安装 node.js1.在服务器上 /opt 下创建 node 文件夹,并进入该文件夹mkdir /opt/nodecd /opt/node 2.下载 node.js3.下载的 node.js ...

  4. 题解:CF559B Equivalent Strings

    CF559B Equivalent Strings 题解 题目描述 吐槽一下,题目翻译有歧义. 思路分析 你会发现,当你需要判断字符串 \(a,b\) 是否等价时,如果长度为偶数,需要继续判断字符串 ...

  5. Go语言net/http包源码学习

    0.前言 该笔记为笔者第一次学习go的net/http包源码的时候所记,也许写的并不是很精确,希望大家多多包涵,一起讨论学习. 该笔记很大程度的参考了网名为"小徐先生"的前辈所分享 ...

  6. SyntaxError: non-default argument follows default argument

    有时候没注意就会犯一些低级错误 问题原因 把没有默认值的形参放到了带有默认值的形参后面 解决办法 问了一下chatgpt,果然一语道破.因为python在定义函数时,在不定长参数中,默认值参数不能放在 ...

  7. MySQL原理简介—9.MySQL索引原理

    大纲 1.磁盘数据页的存储结构 2.没有索引数据库如何搜索数据 3.在表中插入数据时如何进行页分裂 4.如何设计主键索引及如何根据主键索引查询 5.索引的物理存储结构 6.更新数据时自动维护的聚簇索引 ...

  8. Linux之JSON处理工具jq

    一个灵活的轻量级命令行JSON处理器 补充说明 jq 是 stedolan 开发的一个轻量级的和灵活的命令行JSON处理器,源码请参考 jq 项目主页 jq 用于处理JSON输入,将给定过滤器应用于其 ...

  9. 将ipynb文件转成pdf

    本文内容:将GitHub上ipynb源码格式的书籍转成pdf 应用场景:GitHub上某些书籍按章节使用ipynb格式存储 (Jupyter创建了一种良好的交互方式,即将程序说明和代码放在同一个文档中 ...

  10. word操作类

    public class WordUtility { private _Application wordApp = null; private _Document wordDoc = null; pu ...