当前位置: 首页 > news >正文

CSS进阶篇--用CSS开启硬件加速来提高网站性能

中文地址:http://www.cnblogs.com/rubylouvre/p/3471490.html

原文地址:http://blog.teamtreehouse.com/increase-your-sites-performance-with-hardware-accelerated-css

你知道我们可以在浏览器中用css开启硬件加速,使GPU (Graphics Processing Unit) 发挥功能,从而提升性能吗?

现在大多数电脑的显卡都支持硬件加速。鉴于此,我们可以发挥GPU的力量,从而使我们的网站或应用表现的更为流畅。

在桌面端和移动端用CSS开启硬件加速

CSS animations, transforms 以及 transitions 不会自动开启GPU加速,而是由浏览器的缓慢的软件渲染引擎来执行。那我们怎样才可以切换到GPU模式呢,很多浏览器提供了某些触发的CSS规则。

现在,像Chrome, FireFox, Safari, IE9+和最新版本的Opera都支持硬件加速,当它们检测到页面中某个DOM元素应用了某些CSS规则时就会开启,最显著的特征的元素的3D变换。

例如:

.cube {
   -webkit-transform: translate3d(250px,250px,250px)
   rotate3d(250px,250px,250px,-120deg)
   scale3d(0.5, 0.5, 0.5);
}

可是在一些情况下,我们并不需要对元素应用3D变换的效果,那怎么办呢?这时候我们可以使用个小技巧“欺骗”浏览器来开启硬件加速。

虽然我们可能不想对元素应用3D变换,可我们一样可以开启3D引擎。例如我们可以用transform: translateZ(0); 来开启硬件加速 。

.cube {
   -webkit-transform: translateZ(0);
   -moz-transform: translateZ(0);
   -ms-transform: translateZ(0);
   -o-transform: translateZ(0);
   transform: translateZ(0);
   /* Other transform properties here */
}

在 Chrome and Safari中,当我们使用CSS transforms 或者 animations时可能会有页面闪烁的效果,下面的代码可以修复此情况:

.cube {
   -webkit-backface-visibility: hidden;
   -moz-backface-visibility: hidden;
   -ms-backface-visibility: hidden;
   backface-visibility: hidden;
 
   -webkit-perspective: 1000;
   -moz-perspective: 1000;
   -ms-perspective: 1000;
   perspective: 1000;
   /* Other transform properties here */
}

在webkit内核的浏览器中,另一个行之有效的方法是

.cube {
   -webkit-transform: translate3d(0, 0, 0);
   -moz-transform: translate3d(0, 0, 0);
   -ms-transform: translate3d(0, 0, 0);
   transform: translate3d(0, 0, 0);
  /* Other transform properties here */
}

原生的移动端应用(Native mobile applications)总是可以很好的运用GPU,这是为什么它比网页应用(Web apps)表现更好的原因。硬件加速在移动端尤其有用,因为它可以有效的减少资源的利用(麦时注:移动端本身资源有限)。

总结

只对我们需要实现动画效果的元素应用以上方法,如果仅仅为了开启硬件加速而随便乱用,那是不明智的。

小心使用这些方法,如果通过你的测试,结果确是提高了性能,你才可以使用这些方法。使用GPU可能会导致严重的性能问题,因为它增加了内存的使用,而且它会减少移动端设备的电池寿命。

你有在项目中使用过这些方法吗?如果有,请分享你的精彩案例吧。

相关文章:

  • 规律打表,找循环节,类似2016湘潭那个2016
  • HTML 5
  • 机器学习入门之八:机器学习的思考--计算机的潜意识(转载)
  • 两个栈实现一个队列
  • 单点登录与联合登录
  • 用SourceTree轻松Git项目图解
  • DataGridView.DataSource= list(Of T)
  • 前端小功能开发过程小结
  • centos 开启Telnet 服务
  • Linux双网卡绑定bond详解
  • 调试问题杂记
  • 微服务中的异步消息通讯
  • Jenkins使用教程之用户权限管理(包含插件的安装)
  • Lucene5学习之FunctionQuery功能查询
  • linux 系统函数之 (dirname, basename)【转】
  • $translatePartialLoader加载失败及解决方式
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • CSS魔法堂:Absolute Positioning就这个样
  • Iterator 和 for...of 循环
  • JAVA SE 6 GC调优笔记
  • JavaScript-Array类型
  • js
  • JS题目及答案整理
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • Odoo domain写法及运用
  • React-flux杂记
  • scrapy学习之路4(itemloder的使用)
  • SQL 难点解决:记录的引用
  • supervisor 永不挂掉的进程 安装以及使用
  • vue:响应原理
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • Vue实战(四)登录/注册页的实现
  • Web设计流程优化:网页效果图设计新思路
  • 初识 webpack
  • 当SetTimeout遇到了字符串
  • 对超线程几个不同角度的解释
  • 回顾2016
  • 检测对象或数组
  • 老板让我十分钟上手nx-admin
  •  一套莫尔斯电报听写、翻译系统
  • 移动端解决方案学习记录
  • 做一名精致的JavaScripter 01:JavaScript简介
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • #单片机(TB6600驱动42步进电机)
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (3)nginx 配置(nginx.conf)
  • (33)STM32——485实验笔记
  • (8)STL算法之替换
  • (js)循环条件满足时终止循环
  • (JS基础)String 类型
  • (二开)Flink 修改源码拓展 SQL 语法
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)spring boot建达集团公司平台 毕业设计 141538