百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

提高JavaScript动画的性能(js动画效果animate)

toyiye 2024-07-03 01:58 16 浏览 0 评论

在本文中,我收集了一些开发技巧,以帮助您解决JavaScript动画的性能问题,并使您更容易实现在web上实现流畅移动的60fps(每秒帧数)目标。

1、避免使用昂贵的CSS属性

你是否打算使用CSS动画CSS属性转换/ CSS关键帧或JavaScript,重要的是要知道哪些属性带来的改变页面的几何(布局)——这意味着页面上的其他元素的位置将会重新计算,或将涉及绘画操作。布局和绘制任务对于浏览器来说都是非常昂贵的,特别是当你的页面上有几个元素时。因此,如果您避免对触发布局或绘制操作的CSS属性进行动画化,并坚持使用诸如转换和不透明度之类的属性,那么您将看到动画性能的显著提高,因为现代浏览器在优化这些属性方面做得非常出色。

在CSS触发器上,您将找到CSS属性的最新列表,其中包含了它们在每个现代浏览器中触发的工作的信息,包括第一次更改和随后的更改。

更改仅触发复合操作的CSS属性是优化web动画性能的一个简单而有效的步骤。

2、提升你想要的元素到他们自己的层(谨慎)

如果您想要动画的元素在它自己的compositor层上,一些现代浏览器通过将工作卸载到GPU来利用硬件加速。如果使用得当,这个动作可以对动画的表现产生积极的影响。

要将元素放在自己的层上,您需要对其进行升级。一种方法是使用CSS will-change属性。这个属性允许开发人员警告浏览器他们想要在一个元素上做出的一些更改,这样浏览器就可以提前进行必要的优化。

然而,并不是建议你在他们自己的层面上推广太多的元素,或者你是夸大其词。事实上,浏览器创建的每个层都需要内存和管理,这可能会很昂贵。

在Nick Salloum的CSS will-change属性介绍中,您可以了解如何使用will-change的细节、它的优点和缺点。

3、用requestAnimationFrame替换setTimeOut/setInterval

JavaScript动画通常使用setInterval()或setTimeout()方法。

代码像是这样的:

var timer;function animateElement() {
 timer = setInterval( function() {
 // animation code goes here
 } , 2000 );}// To stop the animation, use clearIntervalfunction stopAnimation() {
 clearInterval(timer);}

虽然这是可行的,但是jank的风险很高,因为回调函数在帧中的某个点(可能在最后)运行,这可能导致丢失一个或多个帧。现在,您可以使用一个为流畅的web动画(DOM animation, canvas等)定制的本地JavaScript方法,称为requestAnimationFrame()。

requestAnimationFrame()在最适合浏览器的时间执行动画代码,通常在框架的开始。

你的代码可以是这样的:

function makeChange( time ) {
 // Animation logic here
 // Call requestAnimationFrame recursively inside the callback function
 requestAnimationFrame( makeChange ):}// Call requestAnimationFrame again outside the callback functionrequestAnimationFrame( makeChange );

4、将事件与代码中的动画分离

以每秒60帧的速度,浏览器在每一帧上都有16.67ms来完成它的工作。这并不是很多时间,所以保持代码的精确性会对动画的流畅性产生影响。

将处理诸如滚动、调整大小、鼠标事件等事件的代码与使用requestAnimationFrame()处理屏幕更新的代码分离开来,是优化动画代码以提高性能的好方法。

5、避免长时间运行的JavaScript代码

浏览器使用主线程运行JavaScript,以及其他任务,如样式计算、布局和绘制操作。长时间运行的JavaScript代码可能会对这些任务产生负面影响,这可能导致帧被跳过,并导致janky动画。因此,简化代码肯定是确保动画平稳运行的好方法。

对于不需要访问DOM的复杂JavaScript操作,可以考虑使用Web worker。工作线程执行任务时不会影响用户界面。

6、利用浏览器的DevTools来控制性能问题

您的浏览器的开发工具提供了一种方法来监控您的浏览器在运行JavaScript代码或第三方库的过程中有多困难。它们还提供有关帧速率和更多的有用信息。

您可以通过右键单击web页面并在上下文菜单中选择Inspect来访问Chrome DevTools。

例如,使用性能工具记录web页面将使您了解该页面上的性能瓶颈:

点击录制按钮,几秒钟后停止录制:

此时,您应该有大量的数据来帮助您分析页面的性能:

Chrome DevTools指南将帮助您充分利用DevTools来分析性能,并在您的Chrome浏览器中提供大量其他类型的数据。如果Chrome不是你选择的浏览器,那也没什么大不了的,因为现在大多数浏览器都有超强大的DevTools,你可以利用它们来优化你的代码。

7、使用屏幕外的画布进行复杂的绘图操作

这个技巧与优化HTML5 Canvas的代码有关。

如果您的框架涉及复杂的绘图操作,那么一个好主意是创建一个屏幕外的画布,您在其中执行所有的绘图操作一次或仅当发生更改时,然后在每个框架上绘制屏幕外的画布。

结论

为性能优化代码是一项必要的任务,但它绝不总是简单或直接的。你的动画效果不佳可能有几个原因,但如果你尝试一下上面列出的技巧,你将会在很大程度上避免最常见的动画性能陷阱,从而改善你的网站或应用的用户体验。

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码