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

相关文章
|
2月前
|
缓存 移动开发 JavaScript
如何优化UniApp开发的App的启动速度?
如何优化UniApp开发的App的启动速度?
516 139
|
2月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
265 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
3月前
|
存储 前端开发 安全
实现“永久登录”:针对蜻蜓Q系统的用户体验优化方案(前端uni-app+后端Laravel详解)-优雅草卓伊凡
实现“永久登录”:针对蜻蜓Q系统的用户体验优化方案(前端uni-app+后端Laravel详解)-优雅草卓伊凡
212 5
|
6月前
|
存储
《仿盒马》app开发技术分享--未完成订单列表展示逻辑优化(61)
上一节我们实现订单与优惠券的联合提交时,我去到订单列表页面查看生成的订单信息,发现现在的订单从信息展示到价格计算全都是有问题的。所以紧急的把对应的问题修改一下。
247 70
|
5月前
|
存储 Android开发 数据安全/隐私保护
Thanox安卓系统增加工具下载,管理、阻止、限制后台每个APP运行情况
Thanox是一款Android系统管理工具,专注于权限、后台启动及运行管理。支持应用冻结、系统优化、UI自定义和模块管理,基于Xposed框架开发,安全可靠且开源免费,兼容Android 6.0及以上版本。
499 4
|
6月前
|
数据库
《仿盒马》app开发技术分享-- 优惠券逻辑优化(58)
我们已经实现了优惠券的领取和展示,现在已经趋近于一个完整的电商应用了,但是这时候问题又来了,我们领取完优惠券之后,我们的新用户优惠券模块依然存在,他并没有消失,既然我们是从云数据库中查询的数据,那么我们需要找到一个字段跟他对应起来,来实现新用户领券后关闭这个模块的展示,同时我们在未登录的时候他也要保持隐藏,登录后能实现优惠券的领取。然后在结算的时候得出有几张符合的券能用
119 9
|
10月前
|
机器学习/深度学习 存储 人工智能
MNN-LLM App:在手机上离线运行大模型,阿里巴巴开源基于 MNN-LLM 框架开发的手机 AI 助手应用
MNN-LLM App 是阿里巴巴基于 MNN-LLM 框架开发的 Android 应用,支持多模态交互、多种主流模型选择、离线运行及性能优化。
7773 80
MNN-LLM App:在手机上离线运行大模型,阿里巴巴开源基于 MNN-LLM 框架开发的手机 AI 助手应用
|
6月前
《仿盒马》app开发技术分享-- 逻辑优化第三弹(83)
现在我们的app功能已经趋近完善,bug和缺失的细节也越来越少了,我们继续对app进行优化,首先是我们的积分页面,我们只实现了全部的积分展示内容,对收入和支出的积分明细并没有进行展示,这里我们要实现一下,然后就是我们的优惠券,我们已过期的优惠券并没有修改状态为已过期。
121 0
|
6月前
《仿盒马》app开发技术分享-- 个人中心页优化(62)
上一节我们实现了订单逻辑的优化,现在我们的app功能更加的完善了,并且随着我们的迭代逻辑疏漏越来越少,现在我们继续进行优化,在之前的业务逻辑中我们的个人中心页面展示了用户的余额以及积分商城入口,这里我们要展示余额准确的值,积分商城的入口我们修改为积分相关的功能入口。并且展示当前账号的积分余额
129 0
|
6月前
|
存储 安全
《仿盒马》app开发技术分享-- 购物车逻辑优化(39)
我们的app主要购物功能已经开发的相对来说比较完善了,接下来就针对各个功能的逻辑性进行迭代和修改,让我们的程序更加的健壮,减少一些逻辑上的bug
97 0

热门文章

最新文章