广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >css3中动画性能高的原因是什么
  • 958
分享到

css3中动画性能高的原因是什么

2024-04-02 19:04:59 958人浏览 泡泡鱼
摘要

小编给大家分享一下css3中动画性能高的原因是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 性

小编给大家分享一下css3中动画性能高的原因是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

性能高的原因:1、CSS是关键帧动画,补间动画部分由浏览器完成,浏览器可以对动画进行优化;2、代码简单,性能调优方向固定;3、CSS动画运行在合成线程中,不会阻塞主线程,并且在合成线程中完成的动作不会触发回流和重绘,因而其渲染成本小。

教程操作环境:windows7系统、CSS3&&HTML5版、Dell G3电脑。

1. 浏览器的渲染流程

渲染流程主要有4个步骤

  • 解析 html 生成DOM 树

  • 解析 CSS 样式生成 CSSOM 树,CSSOM 树与 DOM 树结合生成 Render tree

  • 布局 Render Tree 对每个节点进行布局处理,确定在屏幕上的位置

  • 绘制 Render Tree,遍历渲染树将每个节点绘制出来

为了优化用户体验,渲染引擎不会等到 HTML 解析完才创建布局渲染树

生成 DOM 树

DOM 树的构建是一个深度遍历过程,也就是说只有在所有子节点都构建好后才会去构建当前节点的下一个兄弟节点

生成 Render 树

生成 DOM 树的同时会生成 CSSOM 树,根据 CSSOM 和 DOM 树构建 Render Tree,渲染树包括颜色,尺寸等显示属性的矩形

DOM 树和 Render 树

css3中动画性能高的原因是什么

2. 回流和重绘

CSS 中至关重要的概念

回流

回流也叫重排,指几何属性需要改变的渲染。

每一次的回流都会将网页内容重新渲染,只是我们人眼感觉不到有任何变化,但是它确实是会清空页面的,再从页面的左上角的第一个像素点从左到右从上到下这样一点一点渲染,每次回流都会是这样的过程,只是感觉不到而已

渲染树的节点发生改变,影响了该节点的几何属性,导致该节点位置发生变化,此时就会触发浏览器回流并重新生成渲染树。

常见的几何属性:布局,尺寸这些可以用尺子量出来的属性

  • display、float、grid

  • width、padding

重绘

重绘指更改外观属性而不影响集合属性的渲染,类似于颜色这些。相比于回流,重绘的作用不会那么强烈。

渲染树的节点发生改变,但不影响该节点的集合属性,回流对浏览器性能的消耗是远大于重绘的。并且回流就必然带来重绘,重绘不一定需要回流

外观属性

  • clip,background

  • text

在介绍完这些知识后我们来聊聊 CSS 动画

3. CSS3 动画

这里我们只谈论 CSS3 的动画

CSS3 动画也被称为补间动画,原因是只需要添加关键帧的位置,其他的未定义的帧会被自动生成

因为我们只设置了几个关键帧的位置,所以在进行动画控制的时候比较困难,不能再半路暂停动画,或者在动画过程中添加一些其他操作,都不大容易

但是 CSS 动画也有很多的好处

  • 浏览器可以对动画进行优化

  • 帧速不好的浏览器,CSS3 可以自然降级兼容

  • 代码简单,性能调优方向固定

4. js 动画

首先,JS 动画是逐帧动画,在时间帧上绘制内容,一帧一帧的,所以他的可再造性很高,几乎可以完成任何你想要的动画形式。但是由于逐帧动画的内容不一样,会增加制作的负担,占用比较大的资源空间。

但是它也有很多的优势

  • 细腻的动画

  • 可控性高

  • 炫酷高级的动画

5. CSS 动画与 JS 动画对比

前面关于 CSS 动画和 JS 动画,都是一些概念性比较强的东西,不看也罢

说了这么多,到底为什么CSS动画要更高效呢?

第一点

从实现动画的复杂度来看,CSS 动画大多数都是补间动画,而 JS 动画是逐帧动画。当然这里我们不谈论实现的效果

第二点

编码的高效,采用 JS 去实现的动画,无论多简单的动画,都需要去控制整个过程,当然你可能会说可以采用一些库来解决这些问题,但是这些库的实际运行可能要比原生实现的效率要低的多

第三点

性能的高效,在我们前面讲到了回流和重绘,如果我们要操作一个元素向右移动,我们可能需要控制 dom.style.left 属性,每次来改变元素的位置,而结合我们所说的,几何属性的改变必然会引起回流,回流必然引起重绘,可想而知如果我们采用 JS 来实现动画,这个代价有多大,这会造成浏览器在不断的计算页面,从而导致浏览器内存堆积。同时由于 javascript 运行在浏览器的主线程中,主线程中还有其他的重要任务在运行,因而可能会受到干扰导致线程阻塞,从而丢帧

而 CSS 的动画是运行在合成线程中的,不会阻塞主线程,并且在合成线程中完成的动作不会触发回流和重绘

当然还有一个重要的点:JS 动画运行在 CPU,而 CSS 动画运行在 GPU

总的来说, CSS动画的渲染成本小,并且它的执行效率高于 JavaScript 动画

以上是“css3中动画性能高的原因是什么”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网JavaScript频道!

--结束END--

本文标题: css3中动画性能高的原因是什么

本文链接: https://www.lsjlt.com/news/88498.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • css3中动画性能高的原因是什么
    小编给大家分享一下css3中动画性能高的原因是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 性...
    99+
    2022-10-19
  • Css3中的动画属性是什么
    这篇文章主要为大家展示了“Css3中的动画属性是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Css3中的动画属性是什么”这篇文章吧。animation-n...
    99+
    2022-10-19
  • CSS3设置动画的属性是什么
    这篇文章主要为大家展示了“CSS3设置动画的属性是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“CSS3设置动画的属性是什么”...
    99+
    2022-10-19
  • css3动画属性名指的是什么
    这篇文章跟大家分析一下“css3动画属性名指的是什么”。内容详细易懂,对“css3动画属性名指的是什么”感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面跟着小编一起深入学...
    99+
    2022-10-19
  • 索引能提高查询性能的原因是什么
    这篇文章主要介绍“索引能提高查询性能的原因是什么”,在日常操作中,相信很多人在索引能提高查询性能的原因是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”索引能提高查询性能的...
    99+
    2022-10-18
  • CSS3动画和js动画的区别是什么
    小编给大家分享一下CSS3动画和js动画的区别是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!   css实现动画:ani...
    99+
    2022-10-19
  • 浏览器怎么实现移动端高性能css3动画
    本篇内容主要讲解“浏览器怎么实现移动端高性能css3动画”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“浏览器怎么实现移动端高性能css3动画”吧!高性能移动We...
    99+
    2022-10-19
  • JavaScript动画抖动的原因是什么与怎么解决
    这篇文章主要讲解了“JavaScript动画抖动的原因是什么与怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript动画抖动的原因是什么与怎么解决”吧!使用定时器实现动画...
    99+
    2023-07-02
  • node能高并发的原因是什么
    本篇内容主要讲解“node能高并发的原因是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“node能高并发的原因是什么”吧! 因为...
    99+
    2022-10-19
  • Vue中CSS动画的原理是什么
    这篇文章将为大家详细讲解有关 Vue中CSS动画的原理是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。(显示的过程:在动画即将被执行的瞬间,会往div上...
    99+
    2022-10-19
  • Android应用中实现属性动画的原理是什么
    今天就跟大家聊聊有关Android应用中实现属性动画的原理是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Android动画概述:Android 的动画可以分为三种:View 动...
    99+
    2023-05-31
    android 画的 roi
  • css3中实现动画效果的属性是哪个
    小编给大家分享一下css3中实现动画效果的属性是哪个,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! ...
    99+
    2022-10-19
  • Oracle Listener服务不能启动的原因是什么
    这篇文章给大家介绍Oracle Listener服务不能启动的原因是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。    最近时间,更换了项目组,最近...
    99+
    2022-10-18
  • css3动画定制规则的方法是什么
    这篇文章主要讲解了“css3动画定制规则的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“css3动画定制规则的方法是什么”吧! ...
    99+
    2022-10-19
  • MySQL 5.7分区表性能下降的原因是什么
    这篇文章主要讲解了“MySQL 5.7分区表性能下降的原因是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL 5.7分区表性能下降的原因是什么”...
    99+
    2022-10-19
  • Vue不能检测数组变动的原因是什么
    小编给大家分享一下Vue不能检测数组变动的原因是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!问题来源:https://se...
    99+
    2022-10-19
  • Redis单线程能支撑高并发的原因是什么
    本篇内容介绍了“Redis单线程能支撑高并发的原因是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!几种...
    99+
    2022-10-18
  • ps中画笔描边路径用不了的原因是什么
    这篇文章主要介绍了ps中画笔描边路径用不了的原因是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。原因分析:画笔的颜色与画布的颜色相同。看看你画笔的属性。流量和透明度是否为...
    99+
    2023-06-15
  • css清除浮动的原因是什么
    本篇内容介绍了“css清除浮动的原因是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!   ...
    99+
    2022-10-19
  • mysql启动失败的原因是什么
    本篇内容主要讲解“mysql启动失败的原因是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql启动失败的原因是什么”吧!一、一站式解决 1. 问题分析定位# 找到M...
    99+
    2023-06-20
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作