动画性能优化-requestAnimationFrame、GPU等
a、优先采用requestanimationframe,实现动画帧的并发渲染;
b、做减法:兼容低版本浏览器(a中的元素不生效,通过setTimeout实现动画),保留主动画性能,去除重要性不大的动画(跑马灯、过程小动画等);
c、大图动画性能消耗非常大,使用translate3d实现GPU加速,动画结束、暂停时,切换回2d,取消加速;
d、按需加载/卸载动画;
a、首屏优先加载,保证用户体验的流畅性:优先欢迎界面(即首屏)图片资源的加载,所有图片loaded以后,再启动主动画资源的加载,与进度条动画;
b、资源的预加载:在进入主动画之前,进行主动画各资源的加载,当完成加载时,再promise结束进度条动画;
1 /* requestAnimationFrame.js 2 * by zhangxinxu 2013-09-30 3 */ 4 (function() { 5 var lastTime = 0; 6 var vendors = ['webkit', 'moz']; 7 for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) { 8 window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame']; 9 window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || // name has changed in Webkit 10 window[vendors[x] + 'CancelRequestAnimationFrame']; 11 } 12 13 if (!window.requestAnimationFrame) { 14 window.requestAnimationFrame = function(callback) { 15 var currTime = new Date().getTime(); 16 var timeToCall = Math.max(0, 16.7 - (currTime - lastTime)); 17 var id = window.setTimeout(function() { 18 callback(currTime + timeToCall); 19 }, timeToCall); 20 lastTime = currTime + timeToCall; 21 return id; 22 }; 23 } 24 if (!window.cancelAnimationFrame) { 25 window.cancelAnimationFrame = function(id) { 26 clearTimeout(id); 27 }; 28 } 29 }());
newImgObjs[i] = new Image(); newImgObjs[i].src = animationImgs[i];newImgObjs[i].onload = function() {loadeds++;if (loadeds == newImgObjs.length) {self.barObj.completeWelcomePromise.resolve();console.log('图片资源已经加载完成');} };newImgObjs[i].onerror = function() {loadeds++;if (loadeds == newImgObjs.length) {self.barObj.completeWelcomePromise.resolve();console.log('图片资源已经加载完成');} };
音频预加载:
$audio[0].src = imgPath; $audio.on('canplaythrough', function() {loadeds++;if (loadeds == (newImgObjs.length + 1)) {self.barObj.completePromise.resolve();console.log('音频资源已经加载完成');} });$audio[0].onerror = function(e) {loadeds++;if (loadeds == (newImgObjs.length + 1)) {self.barObj.completePromise.resolve();console.log('音频资源已经加载完成');} };
// 资源处理:预加载、监控加载完成、渲染 $.when(self.cmsInfoPromise, self.goodsInfoPromise, self.barObj.completeWelcomePromise).done(function() {// 进度条动效 self.barAnimation();self.handleResource();self.renderStores();});
转载于:https://www.cnblogs.com/hity-tt/p/6420749.html
动画性能优化-requestAnimationFrame、GPU等相关推荐
- css+动画优化,css3动画性能优化--针对移动端卡顿问题
一.使用css,jquery,canvas制作动画 1.Canvas 优点:性能好,强大,支持多数浏览器(除了IE6.IE7.IE8),画出来的图形可以直接保存为 .png 或者 .jpg的图形: 缺 ...
- unity 性能优化之GPU和资源优化
Shader相关优化 众所周知,我们在unity里编写Shader使用的HLSL/CG都是高级语言,这是为了可以书写一套Shader兼容多个平台,在unity打包的时候,它会编译成对应平台可以运行的指 ...
- android帧动画卡顿现象,css3针对移动端卡顿问题的解决(动画性能优化)
一.使用css,jquery,canvas制作动画 1.Canvas 优点:性能好,强大,支持多数浏览器(除了IE6.IE7.IE8),画出来的图形可以直接保存为 .png 或者 .jpg的图形: 缺 ...
- JavaScript动画性能优化
1.使用单个定时器 使用多个定时器会迅速增加CPU的占用率.如果想同时实现多个动画,应该尝试使用一个定时器控制他们.每个定时器会导致浏览器重绘一个或多个屏幕元素.显然,如果全部的动画元素只进行一次重绘 ...
- 移动平台Unity3D 应用性能优化
WeTest 导读 做了大概半年多VR应用了,VR由于双眼double渲染的原因,对性能的优化要求比较高,在项目的进展过程中,总结了一些关于移动平台上Unity3D的性能优化经验,供分享. 一.移动平 ...
- 性能更好的js动画实现方式——requestAnimationFrame
用js来实现动画,我们一般是借助setTimeout或setInterval这两个函数,css3动画出来后,我们又可以使用css3来实现动画了,而且性能和流畅度也得到了很大的提升.但是css3动画还是 ...
- 手机端html5 面试,今日头条 张祖俭 - H5动画在移动平台上的性能优化实践
1.H5动画在移动平台上 的性能优化实践 今日头条 张祖俭 2.大纲 Part 1. H5动画 在移动平台上的性能问题 Part 2. 解决思路-从浏览器渲染入手 Part 3. 在H5Animato ...
- 【腾讯优测干货分享】使用多张图片做帧动画的性能优化
本文来自于Dev Club 开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57fc8cea302e4725036142f6 使用多张图片做帧动画的性能优 ...
- GPU渲染技术及性能优化
GPU渲染技术及性能优化 背景:在我们做图形界面程序开发时,不得不考虑一个问题是GPU渲染性能,GPU是否能支持我们想象中炫酷的设计和动画,这就需要我们对GPU渲染技术有一定的了解,这样我们才能在开发 ...
最新文章
- IDEAWebstorm使用
- vue 数据(data)赋值问题
- 计算机的来源知识,如何理解计算机知识及计算机发展史
- java反编译工具_Android APP 取证之逆向工具篇
- C# 连接SQL数据库以及操作数据库
- [Linux命令]Sed命令参数
- Gurobi 生产计划调度学习案例(含代码实现) (生产切换、装配计划)
- 电脑打字手指正确姿势_写字坐姿不正确的难题,已被家长攻克,果然高手在民间...
- 大数据学习(2-1)-Hadoop安装教程-单机模式和伪分布模式(Ubuntu14.04LTS)
- 修改Jupyter Notebook默认工作目录
- linux用户和用户组及权限管理
- 求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
- 架构实战项目心得(一):技术和工具
- 利用工作流给Windows SharePoint Service 3.0添加Skype通知功能
- VsCode必备插件
- python is not defined是什么意思_is not defined 问题?报错
- 非常时期的囤货手册,建议查看收藏
- 国产划片机 晶圆精密切割机制造商
- apache php 但入口,用 apache rewrite 和 php 实现单一入口时候出现的一个问题
- 链家混三个月底薪_应届毕业生入职链家,到离职
热门文章
- Android开源底部导航,一个开源JPTabBar for Android,炫酷的底部导航栏
- php-calendar,PHPCalendar的函数简介
- 嵌入式Linux系统BSP的设计与实现
- php fpm 测试,zabbix4.2 监控PHP-FPM运行状态的数据
- 7-二路归并排序C实现(递增递减的简单转换)
- Shell——从hello world和echo命令开始
- makefile与make
- oracle中ocr和asm的关系,迁移OCR和VotingDisk并删除原ASM磁盘组
- 根据pid判断某个进程是否存在
- T- SQL性能优化详解