如何优化运行在webkit上的web app
如何优化运行在webkit上的web app
近来公司有个web app 项目运行在移动版android系统上,发现在电脑上跑的很流畅的web页面在移动版webkit上非常不流畅。根本无法和native app相媲美。HTML5的性能还真是让人纠结啊的egg pain...
后来发现国外的 Netflix 网络电视服务提供商的web app,全是HTML5实现的,而且2年前就跑在了250多种移动设备上,在40多个国家上市,UI非常流畅。所以觉得HTML5还是勉强有救的。
公司找了Netflix的资料,决定对自身的web app项目进一步优化,到目前为止效果非常明显。不废话了,以下就是优化点:
1、使用设置内联样式取代改变class,即直接设置style来改变样式
这一点,我一开始也无法理解,但经过测试至少在硬件性能较差的移动版webkit内核浏览器上就是这样的
2、有些css选择器写法会导到深度重绘,应避免这样的css选择器写法,比如:
.list-showing #browse { … }
3、当webkit-transition中的duration属性大于0时,在animation周期中会导致 重复多次重绘
4、reuse instead of allocate&destroy
重用代替重新申明创建和销毁,重用已有的dom而不是创建新的删除旧的,以减少dom树的更新
5、don’t do in software what can be handled by hardware
能用硬件加速就用硬件加速,硬件加速方式直接就是paint出来,而非硬件加速方式则需要计算,渲染,再paint
6、以下几个css属性要注意
-webkit-gradient
-webkit-box-shadow
background-position
background-repeat
border
适当的选择使用它们
7、静态图片渲染永远快于css渲染
css需要通过cpu来绘制,一旦图片下载完成,渲染速度永远快于css实现的方式,css绘制 效果需要在布局上重新计算,渲染,绘制
8、尽量少做动画,如果要,就使用transition
在各设备上支持的比较好;
对应的动画属性也较多;
渲染引擎会对此进行优化;
-webkit-transition-property: opacity, -webkit-transform; 这两个属性在硬件加速下不需要重绘
9、强制某些元素拥有硬件加速能力
-webkit-transform: translateZ(0);
而这个属性就像是以前zoom:1那样不会对效果产生任何引响,但确使对应的元素拥有了硬件回事能力
10、内存注意项
避免内存无限增长;
应最少的丢掉再创建元素(dom);
video设置为display:none可能会释放掉内存;
对象太多会导致频繁并且很慢的垃圾回收;
闭包什么的会导致内存持续上升;
11、层(我理解为div)
减少层的数量
层保持越小越好
尽量少的去更新层
合理组合层
=============================== i am 分割线 ====================================
如何使用调试工具来帮助优化?
开启浏览器的调试功能safari (我的是在mac os上,windows上不知道有木有,好像safari6.0后windows上就木有了)
在safari中显示debug菜单项,需要在terminal程序中输入
defaults write com.apple.Safari \ IncludeInternalDebugMenu 1
然后就可以在safari菜单栏上看到多了一个debug选项

在debug菜单项内中找到show composition borders,然后你就可以看到你的网页各区域的状态了


色块说明:
1、红色compositing layer
代表的是 组合层,左上角的数字代表recalculations重新计算次数
渲染层会被扁平化(像素化)为单一的图片形式,有时会被映射到GPU纹理上
2、黄色container layer
代表内容层, 没有红色层 (no backing surface)-子元素为layer
3、青色overflow box
no backing surface-debugging tool.(不知道怎么翻译,不过这个不影响)
4、绿色 tiled layer
layer宽或高大于1024px
chrome中也有类似的调试功能,(mac os, windows都有)
在chrome浏览器地址栏中输入 about:flags
然后把 composited render layer borders 这个选项 Enable

注:转载请注明出处博客园:绿茶-续(偷饭猫)email: willian12345@126.com
如何优化运行在webkit上的web app的更多相关文章
- 让你在PC上调试Web App,UC浏览器发布开发者版
目前,在手机上使用浏览器访问网页,无法便捷地进行网页语言调试.手机屏幕相对较小且操作不便,直接在手机上进行网页数据调试不太现实. 因此,UC使用技术将手机网页调试信息分离,实现一种能在大屏幕.高配置P ...
- 在Maven普通项目上添加Web app的支持
项目右键____> Add Frameworks Support
- 云集,让 web app 像 native app 那样运行(雄起吧,Web 开发者)
让 web app 像 native app 那样运行 云集是一个轻应用(即 web app)的运行环境,可以让 web app 像 native app 那样运行. just like this 这 ...
- 在 Azure 上部署 Asp.NET Core Web App
在云计算大行其道的时代,当你要部署一个网站时第一选择肯定是各式各样的云端服务.那么究竟使用什么样的云端服务才能够以最快捷的方式部署一个 ASP.NET Core的网站呢?Azure 的 Web App ...
- 对Native App与Web App的一些思考
前言 Native App:C/S架构,使用原生技术(Java/Objective-C/Swift)实现. Web App:B/S架构,使用浏览器技术来实现,广义上也包括phoneGap以及DP正在尝 ...
- 触摸屏网站开发系列(一)-ios web App应用程序(ios meta)
触摸屏网站的开发其实现在来讲比前几年移动端网站开发好多了,触摸屏设备IOS.Android.BBOS6等系统自带浏览器均为WEBKIT核心,这就说明PC上面尚未立行的HTML5 CSS3能够运用在这里 ...
- HTML5-IOS WEB APP应用程序(IOS META)
触摸屏网站的开发其实现在来讲比前几年移动端网站开发好多了,触摸屏设备IOS.Android.BBOS6等系统自带浏览器均为WEBKIT核心,这就说明PC上面尚未立行的HTML5 CSS3能够运用在这里 ...
- Azure 部署 Asp.NET Core Web App
在云计算大行其道的时代,当你在部署一个网站时,第一选择肯定是各式各样的云端服务.那么究竟使用什么样的云端服务才能够以最快捷的方式部署一个 ASP.NET Core 的网站呢?Azure 的 Web A ...
- 远程调试 Azure Web App
当我们将 Web App 部署在 Azure 上时,如果能够实现远程调试,将会极大的提高我们修复 bug 的效率.Visual Studio 一贯以功能强大.易用著称,当然可以实现基于 Azure 应 ...
随机推荐
- java语言内部类和匿名内部类
内部类 在类定义也有类,在该类上的内部被称为一个内部类. 访问功能: 1,内部类可以直接访问外部类成员,它包含私有成员 2,外部类需要访问内部类的成员将需要建立一流的内部对象. 一般用于类的设计. 分 ...
- 自动生成Makefile文件
主要的工具有autoscan, aclocal, autoheader, autoconfig,automake 1 .创建c源文件hello.c #include <stdio.h> i ...
- VS2015前端工具:NPM和Web Essentials
VS2015前端工具:NPM和Web Essentials 1.写作背景 想在5月份前换个工作环境了,“检讨”一下自己混饭的技术水平和处世的人脉关系,觉得很不给力!为人方面,人各有志也就不纠结了,但本 ...
- HBase数据同步ElasticSearch该程序
ElasticSearch的River机械 ElasticSearch本身就提供了River机械,对于同步数据. 在这里,现在能找到的官方推荐River: http://www.elasticsear ...
- 一淘搜索网页抓取系统的分析与实现(3)—scrapy+webkit & mysql+django
图 scrapy+webkit: 如结构图③. scrapy不能实现对javascript的处理,所以须要webkit解决问题.开源的解决方式能够选择scrapinghub的scrapyjs或者功能更 ...
- 快速构建Windows 8风格应用25-数据绑定
原文:快速构建Windows 8风格应用25-数据绑定 本篇博文主要介绍如何将UI元素与数据进行绑定.数据绑定的方向.数据更改通知.数据转换.数据绑定支持的绑定方案. 数据绑定是一种简单方式来显示数据 ...
- java 学习List 的 add 与set差分法
/** * 在List收集在许多方面.add(int index,Object obj)方法与set(int index,Object e)方法不易区分 * .通过以下实例.能够看出两个方法中的差别 ...
- Linux解决:svn: Can't connect to host '*.*.*.*': 因为连接的方没有正确回答或连接在以后的时间
svn服务启动,在server在可使用命令将文件检查,但它不能检测其他计算机.已经提出: "svn: Can't connect to host '*.*.*.*': 因为连接方在一段时间后 ...
- 功能和形式的反思sql声明 一个
日前必须使用sql语句来查询数据库 但每次你不想写一个数据库中读取所以查了下反射 我想用反映一个实体的所有属性,然后,基于属性的查询和分配值 首先,须要一个实体类才干反射出数据库相应的字段, 可是開始 ...
- mysql支持的数据类型及其测试
原文:mysql支持的数据类型及其测试 1.基础知识 1.1如何来查看mysql的帮助手册 ?int Help float; 1.2创建表的规则 CREATE TABLE [IF NOT EXISTS ...