如何优化运行在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

 
 
分类: html5
标签: html5webkit

如何优化运行在webkit上的web app的更多相关文章

  1. 让你在PC上调试Web App,UC浏览器发布开发者版

    目前,在手机上使用浏览器访问网页,无法便捷地进行网页语言调试.手机屏幕相对较小且操作不便,直接在手机上进行网页数据调试不太现实. 因此,UC使用技术将手机网页调试信息分离,实现一种能在大屏幕.高配置P ...

  2. 在Maven普通项目上添加Web app的支持

    项目右键____> Add Frameworks Support

  3. 云集,让 web app 像 native app 那样运行(雄起吧,Web 开发者)

    让 web app 像 native app 那样运行 云集是一个轻应用(即 web app)的运行环境,可以让 web app 像 native app 那样运行. just like this 这 ...

  4. 在 Azure 上部署 Asp.NET Core Web App

    在云计算大行其道的时代,当你要部署一个网站时第一选择肯定是各式各样的云端服务.那么究竟使用什么样的云端服务才能够以最快捷的方式部署一个 ASP.NET Core的网站呢?Azure 的 Web App ...

  5. 对Native App与Web App的一些思考

    前言 Native App:C/S架构,使用原生技术(Java/Objective-C/Swift)实现. Web App:B/S架构,使用浏览器技术来实现,广义上也包括phoneGap以及DP正在尝 ...

  6. 触摸屏网站开发系列(一)-ios web App应用程序(ios meta)

    触摸屏网站的开发其实现在来讲比前几年移动端网站开发好多了,触摸屏设备IOS.Android.BBOS6等系统自带浏览器均为WEBKIT核心,这就说明PC上面尚未立行的HTML5 CSS3能够运用在这里 ...

  7. HTML5-IOS WEB APP应用程序(IOS META)

    触摸屏网站的开发其实现在来讲比前几年移动端网站开发好多了,触摸屏设备IOS.Android.BBOS6等系统自带浏览器均为WEBKIT核心,这就说明PC上面尚未立行的HTML5 CSS3能够运用在这里 ...

  8. Azure 部署 Asp.NET Core Web App

    在云计算大行其道的时代,当你在部署一个网站时,第一选择肯定是各式各样的云端服务.那么究竟使用什么样的云端服务才能够以最快捷的方式部署一个 ASP.NET Core 的网站呢?Azure 的 Web A ...

  9. 远程调试 Azure Web App

    当我们将 Web App 部署在 Azure 上时,如果能够实现远程调试,将会极大的提高我们修复 bug 的效率.Visual Studio 一贯以功能强大.易用著称,当然可以实现基于 Azure 应 ...

随机推荐

  1. [CLR via C#]1.6 Framework类库~1.9与非托管代码的互操作性

    原文:[CLR via C#]1.6 Framework类库~1.9与非托管代码的互操作性 1.6 Framework类库 1. .NET Framework中包含了Framework类库(Frame ...

  2. centos7的安装

    初装centos7还是在九月份,那时候关于win7 下centos7硬盘安装的资料很少,现在就好多, 在这里备份下东西吧 首先是安装的时候,关于找从那个地方找image的问题. hda ,sda分别表 ...

  3. Android Studio怎样更改JDK和SDK的路径?

    这个对于非常多刚转到Android Studio上的来说,确实是一个问题.可能你在设置里面找了非常久都没找到这个选项. 直接上图吧,按下图就能够找到设置的地儿了,然后直接设置到你SDK或者JDK的路径 ...

  4. HDU Redraw Beautiful Drawings 推断最大流是否唯一解

    点击打开链接 Redraw Beautiful Drawings Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 ...

  5. MySQL中group_concat函数-和group by配合使用

    MySQL中group_concat函数 完整的语法如下: group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔 ...

  6. WCF服务上应用protobuf

    WCF服务上应用protobuf Web api  主要功能: 支持基于Http verb (GET, POST, PUT, DELETE)的CRUD (create, retrieve, updat ...

  7. c# 播放器 支持所有格式

    原文:c# 播放器 支持所有格式 ---恢复内容开始--- 直接上代码 internal static class LibVlcAPI { internal struct PointerToArray ...

  8. Android正在使用Handler实现消息分发机制(两)

    在开始这篇文章之前,.首先,我们在总结前两篇文章Handler, Looper和MessageQueue像一些关键点: 0)在创建线程Handler之前,你必须调用Looper.prepare(), ...

  9. js 模拟QQ聊天窗口图片播放效果(带滚轮缩放)

    页面效果如下: 完整代码如下: <!DOCTYPE html> <html> <head> <title>Test</title> < ...

  10. 实例学习SSIS(五)--理论介绍SSIS

    原文:实例学习SSIS(五)--理论介绍SSIS 导读: 实例学习SSIS(一)--制作一个简单的ETL包 实例学习SSIS(二)--使用迭代 实例学习SSIS(三)--使用包配置 实例学习SSIS( ...